2015-05-19 2 views
0

****** ******** РЕДАКТИРОВАТЬЗапрос не выбирает все строки в таблице

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 
) 
+0

попытался удалить предложение 'where'? –

+0

Да, я пробовал это без 'where', а также без' left join' (и, следовательно, 'where' тоже). Это довольно неприятно. – dsaa

+0

Попробуйте сделать INNER JOIN s LEFT JOIN s, вы должны начать видеть данные и NULL, где данные, скорее всего, отсутствуют/не соответствуют – dbinns66

ответ

0

Нет настоящей «проблемы», так сказать, здесь у меня просто были данные в неправильных данных в правой колонке.

Кредит Александру Миладиновичу за то, что выбрал этот.

Смежные вопросы