私が持っている場合
SELECT * FROM Table1 t1
LEFT JOIN Table2 t2 ON t1.id = t2.id
WHERE t1.user='bob';
WHERE
2 つのテーブルが の後に句が実行されますJOINED
か?
JOIN の前に実行されるようにするにはどうすればよいですか?
私が持っている場合
SELECT * FROM Table1 t1
LEFT JOIN Table2 t2 ON t1.id = t2.id
WHERE t1.user='bob';
WHERE
2 つのテーブルが の後に句が実行されますJOINED
か?
JOIN の前に実行されるようにするにはどうすればよいですか?
WHERE
を別のJOIN
条件に変更する
LEFT JOIN Table2 t2 on t1.id = t2.id AND t1.user='bob'
左結合での私の経験では、ON ステートメントで「左」(t1) テーブルのレコードを除外することはできません。これは、定義により、すべての t1 レコードが含まれるためです。where ステートメントは、後で結合の結果に適用されるため、機能します。
あなたが何を達成したいのか正確にはわかりませんが、おそらく内部結合もあなたのニーズに合っていて、t1.user = 'bob'条件をONステートメントに追加できます。
しかし、Mosty Mostacho が正しければ、条件の場所 (WHERE と ON) は実行速度に関係しません。
使用できるのは、次のような FROM の後のテーブル式です。
SELECT *
FROM (SELECT
id
FROM Table1
WHERE user = 'bob') AS t1
LEFT JOIN Table2 t2
ON t1.id = t2.id
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
まだ完全な厳しさを経験していませんが、うまくいくようです。
できるよ
SELECT *
FROM Table1 t1
LEFT JOIN Table2 t2
ON t1.id=t2.id AND t1.user='bob';