3

この句を使用してUSING3つ以上のテーブルを結合できますか?つまり、私はこれを行うことができます

SELECT * FROM (a, b, c) USING(date)

またはの代わりに同様のもの

SELECT * FROM a, b USING(date), c USING(date)

MySQLを使用しています。

編集
私は私が誤解されている答えからわかります。2番目の例は正常に機能しますが、多くのテーブルでは非常に長く冗長になります。私は、これを実現するためのさらに複雑な方法ではなく、よりクリーンな構文を探しています。

4

4 に答える 4

4

目的を達成するためのそのような構文はありませんが、近いものが1つあります。

見下されているようなものですが、使用を検討できるのはNATURAL JOIN構文です。結合に使用される条件は、結合する列を指定する必要がないという点で暗黙的です。暗黙の条件は、結合しているテーブル全体で同じ名前の列で発生します。

dateすべてのテーブルで同じ名前の列が1つしかない場合は、次のようにすることができます。

SELECT *
FROM a
NATURAL JOIN b
NATURAL JOIN c

dateフィールド名がテーブルで同じであるため、これは列のテーブルを暗黙的に結合します。

このアプローチの欠点は、もちろん、別のテーブルに同じ名前の他の列を含めることができないという事実です。そうしないと、それらの列意図せずに結合条件に組み込まれるため、結合が壊れます。

詳細NATURAL JOIN

于 2012-06-27T09:25:23.373 に答える
4

いいえ、残念ながら、あなたの例では構文を使用できません。有効な SQL ではありません。

代わりに、次のいずれかを使用できます。

明示的なJOIN構文を使用して、目的を達成できます。

SELECT *
    FROM x
    LEFT JOIN y USING(date)
    LEFT JOIN z USING(date);

通常、より適切に制御するには、ON句を使用します。

SELECT *
    FROM x
    LEFT JOIN y ON x.date = y.date
    LEFT JOIN z ON y.date = z.date;
于 2012-06-27T09:13:14.477 に答える
1

UNION ALL を使用する

SELECT * FROM a WHERE myDate = 'yourDate'
UNION ALL
SELECT * FROM b WHERE myDate = 'yourDate'
UNION ALL
SELECT * FROM c WHERE myDate = 'yourDate'
于 2012-06-27T09:23:33.253 に答える
-1

JOIN 句を使用して 2 つのテーブルを結合できますが、2 つのテーブルは外部キーで接続する必要があります。次に例を示します。

SELECT Persons.Name
FROM Persons
INNER JOIN Orders
ON Persons.Id = Orders.Id;
于 2012-06-27T09:15:47.920 に答える