这个MySQL语句做什么?

这个MySQL语句做什么?,mysql,cross-join,Mysql,Cross Join,它来自一个开源项目,没有可用的文档 特别是,交叉连接意味着什么?我只使用了连接/左连接。根据,它基本上是内部连接的同义词,内部连接与just join相同,即内部连接是默认值。交叉连接: 查询会将select的结果插入前缀_tab_lang中。select仅是交叉乘积中的两列。第三列-名称-实际上来自一个完全不同的选择,这也是非常直截了当的,只是其中一个条件是另一个选择 简而言之,这是我见过的最糟糕的查询之一。它的性能可能是可怕的,它应该被一段转换保护代码取代,或者至少是一个存储过程。 你可以认

它来自一个开源项目,没有可用的文档

特别是,交叉连接意味着什么?我只使用了连接/左连接。

根据,它基本上是内部连接的同义词,内部连接与just join相同,即内部连接是默认值。

交叉连接:

查询会将select的结果插入前缀_tab_lang中。select仅是交叉乘积中的两列。第三列-名称-实际上来自一个完全不同的选择,这也是非常直截了当的,只是其中一个条件是另一个选择


简而言之,这是我见过的最糟糕的查询之一。它的性能可能是可怕的,它应该被一段转换保护代码取代,或者至少是一个存储过程。

你可以认为以下查询在MySQL中是同义词:

INSERT IGNORE INTO `PREFIX_tab_lang` (`id_tab`, `id_lang`, `name`)
    (SELECT `id_tab`, id_lang, (SELECT tl.`name`
        FROM `PREFIX_tab_lang` tl
        WHERE tl.`id_lang` = (SELECT c.`value`
            FROM `PREFIX_configuration` c
            WHERE c.`name` = 'PS_LANG_DEFAULT' LIMIT 1) AND tl.`id_tab`=`PREFIX_tab`.`id_tab`)
    FROM `PREFIX_lang` CROSS JOIN `PREFIX_tab`);
测试用例:

SELECT      *
FROM        Table1
CROSS JOIN  Table2;

SELECT      *
FROM        Table1, Table2;

SELECT      *
FROM        Table1
INNER JOIN  Table2;

SELECT      *
FROM        Table1
JOIN        Table2;
所有四个查询都将返回以下结果集:

CREATE TABLE Table1 (id int, value varchar(10));
CREATE TABLE Table2 (id int, t1_id int);

INSERT INTO Table1 VALUES (1, 'Value 1');
INSERT INTO Table1 VALUES (2, 'Value 2');
INSERT INTO Table1 VALUES (3, 'Value 3');
INSERT INTO Table1 VALUES (4, 'Value 4');

INSERT INTO Table2 VALUES (1, 1);
INSERT INTO Table2 VALUES (2, 1);
INSERT INTO Table2 VALUES (3, 2);
INSERT INTO Table2 VALUES (4, 2);
INSERT INTO Table2 VALUES (5, 2);
INSERT INTO Table2 VALUES (6, 3);
INSERT INTO Table2 VALUES (7, 4);
INSERT INTO Table2 VALUES (8, 4);
INSERT INTO Table2 VALUES (9, 4);

这是JOIN的另一个同义词,因为内部JION和JOIN是一样的?是的,我刚刚在我的答案中添加了这个。在标准SQL中,交叉连接实际上不同于内部连接,因为内部连接通常需要上的谓词,而交叉连接则不需要。在标准SQL中,交叉连接如何?@Daniel Vassallo,因此它是笛卡尔连接的同义词?@user198729:是的。MySQL对内部连接和交叉连接使用了类似的语法。从技术上讲,内部连接应该需要ON谓词,正如上面的注释中提到的codeka。
+------+---------+------+-------+
| id   | value   | id   | t1_id |
+------+---------+------+-------+
|    1 | Value 1 |    1 |     1 |
|    2 | Value 2 |    1 |     1 |
|    3 | Value 3 |    1 |     1 |
|    4 | Value 4 |    1 |     1 |
|    1 | Value 1 |    2 |     1 |
|    2 | Value 2 |    2 |     1 |
|    3 | Value 3 |    2 |     1 |
|    4 | Value 4 |    2 |     1 |
|    1 | Value 1 |    3 |     2 |
|    2 | Value 2 |    3 |     2 |
|    3 | Value 3 |    3 |     2 |
|    4 | Value 4 |    3 |     2 |
|    1 | Value 1 |    4 |     2 |
|    2 | Value 2 |    4 |     2 |
|    3 | Value 3 |    4 |     2 |
|    4 | Value 4 |    4 |     2 |
|    1 | Value 1 |    5 |     2 |
|    2 | Value 2 |    5 |     2 |
|    3 | Value 3 |    5 |     2 |
|    4 | Value 4 |    5 |     2 |
|    1 | Value 1 |    6 |     3 |
|    2 | Value 2 |    6 |     3 |
|    3 | Value 3 |    6 |     3 |
|    4 | Value 4 |    6 |     3 |
|    1 | Value 1 |    7 |     4 |
|    2 | Value 2 |    7 |     4 |
|    3 | Value 3 |    7 |     4 |
|    4 | Value 4 |    7 |     4 |
|    1 | Value 1 |    8 |     4 |
|    2 | Value 2 |    8 |     4 |
|    3 | Value 3 |    8 |     4 |
|    4 | Value 4 |    8 |     4 |
|    1 | Value 1 |    9 |     4 |
|    2 | Value 2 |    9 |     4 |
|    3 | Value 3 |    9 |     4 |
|    4 | Value 4 |    9 |     4 |
+------+---------+------+-------+
36 rows in set (0.01 sec)