Можно ли присоединиться к var из LEFT JOIN без разрушения строк? - PullRequest
0 голосов
/ 28 января 2010

Мой код генерирует большой запрос. Простая версия -

SELECT * FROM main_table as mt
JOIN user_data AS ud ON mt.user_id=ud.id 
LEFT JOIN ban_Status AS bs ON  ud.status_id=bs.id
JOIN AnotherTable ON bs.data=AnotherTable.id

ПРИМЕЧАНИЕ. Этот код не проверен.

Когда я удаляю последнее соединение, я получаю результаты. Я также могу изменить его на левое соединение, но это было бы неправильно. Если ud.status не равен NULL, я бы хотел соединение, как всегда, когда делаю запрос на выборку из ban_Status. Как это исправить? я должен написать левое соединение на каждой таблице, если я оставил соединение родительской таблицы? разве это не даст мне побочных эффектов?

Я пользуюсь банкоматом sqlite, но переключусь на tsql

1 Ответ

3 голосов
/ 28 января 2010

Используйте LEFT JOIN, но в предложении WHERE укажите, что либо ud.status_id имеет значение null, а AnotherTable.id имеет значение null, либо ни одно из них равно null.

SELECT * FROM main_table as mt
JOIN user_data AS ud ON mt.user_id=ud.id 
LEFT JOIN ban_Status AS bs ON  ud.status_id=bs.id
LEFT JOIN AnotherTable ON bs.data=AnotherTable.id
WHERE (ud.status_id is null and AnotherTable.id is null)
       or (ui.status_id is not null and AnotherTable.id is not null)

Это помешает вам выбрать любые записи, которые имеют ban_Status, но не имеют дополнительных данных из другой таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...