Подтвердить что ты не робот

ГДЕ оговорка перед ВНУТРИ

Если у меня есть

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

Ли WHERE является условие запуска после двух таблиц JOINED?

Как мне сделать так, чтобы он работал до JOIN?

4b9b3361

Ответ 1

Измените WHERE на другое условие JOIN

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

Ответ 2

Предложение where будет выполнено до join, чтобы оно не включало ненужные записи. Таким образом, ваш код в порядке, как есть.

Ответ 3

В моем опыте в левом соединении вы не можете исключать записи в таблице "left" (t1) в ON-statement, поскольку - по определению - все записи t1 будут включены. Оператор where работает, поскольку он будет применен к результату объединения впоследствии.

Я точно не знаю, чего вы хотите достичь, но, скорее всего, внутреннее соединение подходит и вашим потребностям, а затем вы можете добавить условие t1.user = 'bob' к оператору ON.

Но если Мосты Мостачо верен, местоположение (WHERE vs ON) условия не имеет отношения к скорости выполнения.

Ответ 4

вы можете сделать

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

Ответ 5

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

Пока еще не испытал все это, но, похоже, работает.

Ответ 6

Вы должны просто добавить t1.user='bob' в предложение ON перед другим условием, и оно будет оценено в первую очередь:

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

Ответ 7

То, что вы можете использовать, является табличным выражением после FROM следующим образом:

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