40

私が持っている場合

SELECT * FROM Table1 t1 
LEFT JOIN Table2 t2 ON t1.id = t2.id 
WHERE t1.user='bob';

WHERE2 つのテーブルが の後に句が実行されますJOINEDか?

JOIN の前に実行されるようにするにはどうすればよいですか?

4

7 に答える 7

30

WHEREを別のJOIN条件に変更する

LEFT JOIN Table2 t2 on t1.id = t2.id AND t1.user='bob'

于 2012-04-12T23:41:52.840 に答える
2

左結合での私の経験では、ON ステートメントで「左」(t1) テーブルのレコードを除外することはできません。これは、定義により、すべての t1 レコードが含まれるためです。where ステートメントは、後で結合の結果に適用されるため、機能します。

あなたが何を達成したいのか正確にはわかりませんが、おそらく内部結合もあなたのニーズに合っていて、t1.user = 'bob'条件をONステートメントに追加できます。

しかし、Mosty Mostacho が正しければ、条件の場所 (WHERE と ON) は実行速度に関係しません。

于 2012-09-27T17:00:22.513 に答える
1

使用できるのは、次のような FROM の後のテーブル式です。

SELECT *
FROM (SELECT
        id
    FROM Table1
    WHERE user = 'bob') AS t1
LEFT JOIN Table2 t2
    ON t1.id = t2.id
于 2019-04-19T10:14:12.813 に答える
0

RIGHT JOIN が解決策でした:

SELECT cars.manufacturer, cars.year FROM cars 
RIGHT JOIN (SELECT m.manufacturer FROM cars AS m ORDER BY m.year DESC LIMIT 3) subq 
ON cars.manufacturer=subq.manufacturer

まだ完全な厳しさを経験していませんが、うまくいくようです。

于 2014-03-08T02:59:26.113 に答える
0

できるよ

SELECT * 
    FROM Table1 t1 
    LEFT JOIN Table2 t2
        ON t1.id=t2.id AND t1.user='bob';
于 2012-04-12T23:42:32.407 に答える