1

私は他の誰かのコードに苦労しています。次の (MySQL) ステートメントで WHERE 句は何をしますか?

    SELECT * FROM t1, t2 WHERE t1.id = t2.id IN (1,2,3)

私の場合、望ましい結果が得られませんが、元の作成者が意図したことを理解しようとしています。このような WHERE 句の使用例を誰か提供できますか?

4

1 に答える 1

4

この条件は右から始まり、 を評価しt2.id IN (1,2,3)、結果 (0 または 1) を取得し、それを との結合に使用しt1.idます。リストのt2withidのすべての行は、 has of one の行に結合されます。の他のすべての行は、ゼロの行と結合されます。ここにsqlfiddle.comの小さなデモがあります: linkINt1idt2t1id

しかし、それが作者の意図であったとは想像しがたいです: 私は、両方の項目がリストにあり、また互いに等しいことをチェックする可能性が高いと思います. 作成者が 2 つのテーブルを結合したかったように見えるため、互いに等しいことが重要です。

結合を行うより新しい方法は、ANSI SQL 構文を使用することです。ANSI SQL でのクエリに相当するものを次に示します。

SELECT * FROM t1 JOIN t2 ON t1.id = t2.id IN (1,2,3)
于 2013-01-04T05:42:53.557 に答える