4
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`);

これはオープンソースプロジェクトからのものであり、利用可能なドキュメントはありません。

特に、どういうcross-join意味ですか?結合/左結合のみを使用しました。

4

3 に答える 3

2

MySQLのドキュメントによると、これは基本的にはの同義語でINNER JOINあり、INNER JOINちょうど同じですJOIN(つまり、 " INNER"がデフォルトです)。

于 2010-05-03T07:30:20.597 に答える
1

相互参加: http: //en.wikipedia.org/wiki/Join_%28SQL%29#Cross_join

PREFIX_tab_langクエリは選択の結果に挿入されます。選択は、外積からの2列だけです。3番目の列--name--は、実際にはまったく異なるselectから取得されます。これも、where条件の1つがさらに別のselectであることを除けば、非常に単純です。

要するに、これは私が今まで見た中で最悪のクエリの1つです。そのパフォーマンスは恐らく恐ろしいものであり、TRANSATIONで保護されたコード、または少なくともストアドプロシージャに置き換える必要があります。

于 2010-05-03T07:35:14.090 に答える
1

実際には、次のクエリをMySQLの同義語と見なすことができます。

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);

4つのクエリはすべて、次の結果セットを返します。

+------+---------+------+-------+
| 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)
于 2010-05-03T07:35:17.897 に答える