****** ******** РЕДАКТИРОВАТЬЗапрос не выбирает все строки в таблице
Sql скрипка here
****** ******* РЕДАКТИРОВАТЬ *
Я пытаюсь объединить данные из четырех разных таблиц.
По существу, системный поток выглядит следующим образом: пользователь регистрируется и помещает их доступность, которая вставлена в базу данных; затем администратор может просматривать, какие пользователи доступны в любой заданной дате. Для этого конкретного процесса администратор должен иметь возможность видеть доступных пользователей, которые еще не назначены в игру.
Я знаю, что это можно было бы реализовать через PHP, используя ряд запросов и скриптов, но я уверен, что это также можно управлять через соединения.
Мой существующий запрос:
SELECT
`availability`.`ref_num`,
`referee`.`grading`,
`referee`.`user_number`,
`user`.`forename`,
`user`.`surname`,
`availability`.`availability_num`,
`availability`.`wk_num`,
`availability`.`day_num`
FROM `availability`
INNER JOIN referee on availability.ref_num = referee.ref_number
INNER JOIN user on user.user_number = referee.user_number
LEFT JOIN appointments ON
(appointments.referee_code = referee.ref_number) AND
(appointments.availability_number = availability.availability_num)
WHERE appointments.appointment_number IS null
У меня есть четыре пользователей в настоящее время вошли в моей тестовой БД, каждый из них арбитр, и каждый из них имеет две свободные даты. Однако запрос выше возвращает только две строки, а не восемь.
Возвращенный данные:
ref_num grading user_number forename surname availability_num wk_num day_num
3 5 6 John Smith 72 20 6
3 5 6 John Smith 73 21 6
Однако, я бы ожидать:
ref_num grading user_number forename surname availability_num wk_num day_num
1 6 3 Bob Wills 76 20 6
1 6 3 Bob Wills 77 21 6
2 7 5 Alex Jones 74 20 6
2 7 5 Alex Jones 75 21 6
3 5 6 John Smith 72 20 6
3 5 6 John Smith 73 21 6
4 8 7 James Bar 78 20 6
4 8 7 James Bar 79 21 6
У меня есть ощущение, что две строки, которые на самом деле являются возвратили, потому что эти две нижние значения в availability_num
, но я не могу решить, почему остальные таблицы не возвращаются.
Структуры таблиц приведены ниже для справки. Некоторые рекомендации относительно того, где я ошибаюсь, будут оценены. Извините за длинный пост, но я хотел представить всю имеющуюся у меня информацию.
`appointments` (
`appointment_number` int(11),
`level` int(11) NOT NULL,
`referee_code` int(11) NOT NULL,
`role` int(11) NOT NULL,
`fixture_number` int(11) NOT NULL,
`availability_number` int(11) NOT NULL,
`published` int(11) NOT NULL
)
`availability` (
`availability_num` int(11) NOT NULL,
`wk_num` int(11) NOT NULL,
`day_num` int(11) NOT NULL,
`ref_num` int(11) NOT NULL
)
`referee` (
`ref_num` int(11) NOT NULL,
`grading` int(11) NOT NULL,
`user_number` int(11) NOT NULL
)
`user` (
`user_number` int(11) unsigned NOT NULL,
`forename` varchar(50) NOT NULL,
`surname` varchar(50) NOT NULL,
`mobile_phone_number` varchar(11) DEFAULT NULL,
`home_phone_number` varchar(11) DEFAULT NULL,
`email` varchar(100) NOT NULL,
`user_name` varchar(50) DEFAULT NULL,
`pass_hash` varchar(250) DEFAULT NULL
)
попытался удалить предложение 'where'? –
Да, я пробовал это без 'where', а также без' left join' (и, следовательно, 'where' тоже). Это довольно неприятно. – dsaa
Попробуйте сделать INNER JOIN s LEFT JOIN s, вы должны начать видеть данные и NULL, где данные, скорее всего, отсутствуют/не соответствуют – dbinns66