Пустые строки в MySQL SELECT с LEFT JOIN - PullRequest
0 голосов
/ 26 июня 2009

У меня есть три таблицы: users, facilities и staff_facilities.

users содержит средние данные пользователя, в моем случае наиболее важными полями являются users.id, users.first и users.last.

facilities также содержит достаточное количество данных, но ни один из них не обязательно относится к этому примеру, за исключением facilities.id.

staff_facilties состоит из staff_facilities.id (int, auto_inc, NOT NULL), staff_facilities.users_id (int, NOT NULL) и staff_faciltities.facilities_id (int, NOT NULL). (Это глоток!)

staff_facilities ссылается на идентификаторы для двух других таблиц, и мы вызываем эту таблицу для поиска пользователей объектов и объектов пользователей.

Это мой запрос на выбор в PHP:

SELECT users.id, users.first, users.last FROM staff_facilities LEFT JOIN users ON staff_facilities.users_id=users.id WHERE staff_facilities.facilties_id=$id ORDER BY users.last

Этот запрос прекрасно работает на нашем сервере разработки, но когда я помещаю его в производственную среду клиента, в результатах часто появляются пустые строки. Наш сервер разработки использует реплицированные таблицы и данные, которые уже существуют на производственном сервере клиента, но аппаратное и программное обеспечение сильно отличается.

Эти строки лишены какой-либо информации, включая три поля id, которые требуют ввода значений NOT NULL в базу данных. Выполнение запроса с помощью инструментов управления MySQL на сервере возвращает те же результаты. Поиск таблицы по пустым полям ничего не дал.

Другая странная вещь заключается в том, что количество пустых строк изменяется в зависимости от разных результатов, вызванных проверкой идентификатора предложения WHERE. Обычно это около одной-трех пустых строк, но они согласуются при использовании одного и того же параметра.

Я много раз имел дело с возвратом почти повторяющихся строк из-за LEFT JOINS, но у меня никогда не было такого раньше. Что касается отображения информации, я могу легко скрыть ее от конечного пользователя. Меня беспокоит, прежде всего, то, что эта проблема будет усугубляться с течением времени, и количество записей будет увеличиваться. На данный момент эта система только что установлена, и у нас уже есть более 2000 записей в таблице staff_facilities.

Любое понимание или направление будет оценено. Я могу также предоставить более подробные примеры и информацию.

1 Ответ

4 голосов
/ 26 июня 2009

Вы выбираете только столбцы из таблицы с правой стороны объединения. Конечно, некоторые из них абсолютно нулевые, вы сделали левое соединение. Таким образом, эти записи соответствуют идентификатору в таблице в левой части объединения, но не соответствуют никаким данным в правой части объединения. Поскольку вы не возвращаете никаких столбцов из левой таблицы, вы не видите данных.

...