Проблема MySQL: LEFT JOIN на пустой таблице - PullRequest
6 голосов
/ 03 марта 2010

Учитывая базу данных с двумя таблицами X и Y, у меня есть запрос, который должен LEFT JOIN две таблицы по атрибутам X.a1 и Y.b1. Я использовал следующий запрос:

SELECT X.a1, X.a2, Y.b1, Y.b2 FROM X LEFT JOIN Y ON (X.a1 = Y.b1)

Я подумал, что это будет достаточно для работы, даже если Y в настоящее время пустая таблица. Однако запрос прерывается, потому что таблица Y, кажется, пуста. Есть ли способ переформатировать этот запрос, чтобы, даже если Y - пустая таблица, LEFT JOIN не сломался? Или мне просто нужно всегда убедиться, что в таблице Y есть какие-то данные, даже если они не совпадают с данными в таблице X (отсюда LEFT JOIN).

Ответы [ 3 ]

8 голосов
/ 29 июля 2010

Поскольку вы не опубликовали свой фактический SQL, я просто делаю предположение здесь. Мой опыт подсказывает, что у вас может быть предложение where, которое заставляет SQL возвращать пустой набор.

SELECT X.a1, X.a2, Y.b1, Y.b2 FROM X LEFT JOIN Y ON (X.a1 = Y.b1)
WHERE Y.b3 = 'something'

Приведенный выше SQL вернет пустой набор результатов. Возможно, вам придется изменить ваш SQL в следующий формат, подняв проблемное предложение where в предложение LEFT JOIN ON.

SELECT X.a1, X.a2, Y.b1, Y.b2 FROM X 
LEFT JOIN Y ON (X.a1 = Y.b1 and Y.b3 = 'something')
5 голосов
/ 03 марта 2010

Ваши имена таблиц немного сбивают с толку. Это X и Y или X.a и Y.b?

Если X и Y:

SELECT X.a1, X.a2, Y.a1, Y.b2 FROM X LEFT OUTER JOIN Y ON (X.a1 = Y.b1)

должен вернуть все X с нулями для Y.a1 и Y.b2, где нет соответствующих записей.

0 голосов
/ 14 февраля 2017

Попробуйте запрос в каком-нибудь редакторе Sql, который возвращает такие ошибки, как HeidiSQL или аналогичный. В моем случае проблема заключалась в неоднозначном идентификаторе в предложении WHERE.

...