ВЫБЕРИТЕ подмножество из двух таблиц и результаты LEFT JOIN - PullRequest
0 голосов
/ 03 мая 2010

Я пытаюсь написать немного SQL для SQLITE, который будет принимать подмножество из двух таблиц (TableA и TableB), а затем выполнять LEFT JOIN.

Это то, что я пробовал, но это дает неправильный результат:

Select * from TableA 
Left Join TableB using(key)
where TableA.key2 = "xxxx"
AND TableB.key3 = "yyyy"

Это игнорирует случаи, когда key2 = "xxxx", но key3! = "Yyyy".

Я хочу, чтобы все строки из TableA соответствовали моим критериям, соответствует ли их соответствующее значение в TableB, но только те строки из TableB, которые соответствуют обоим условиям.

Мне удалось решить эту проблему с помощью VIEW, но я уверен, что должен быть лучший способ сделать это. Это только начинает сводить меня с ума, пытаясь решить его сейчас.

(Спасибо за любую помощь, надеюсь, я объяснил это достаточно хорошо).

Ответы [ 2 ]

2 голосов
/ 03 мая 2010

Вы допустили классическую ошибку левого соединения. В большинстве баз данных, если вам нужно условие для таблицы справа от левого соединения, вы должны поместить это условие в само соединение, а НЕ в предложение where. В SQL Server это превратит левое соединение во внутреннее соединение. Я не использовал SQl lite, так что я не знаю, делает ли он то же самое, но все записи должны в целом соответствовать предложению where.

1 голос
/ 03 мая 2010
Select * 
from TableA  
Left Join TableB on TableA.key = TableB.key 
    and TableB.key3 = "yyyy" 
where TableA.key2 = "xxxx" 
...