2014-02-05 2 views
0

Я изо всех сил старался лечь в таблицу, в которой есть условие IS NULL. Но результат запроса получает данные NULL.LEFT JOIN - это состояние NULL

SELECT users.id, employees.id as empid, users.activated_at, users.created_at 
FROM employees 
LEFT JOIN users on users.login = employees.employeeid 
WHERE users.activated_at IS NULL 
ORDER BY users.created_at ASC 

После синтаксиса sql я получаю этот запрос. Я просто хочу, чтобы пользователи, которые еще не активированы, имеют данные о сотрудниках. Но я всегда получаю сотрудников с NULL пользовательскими данными.

+1

Вам нужно сделать 'ВНУТРЕННЕЙ JOIN', если вы не хотите сотрудников с пользователем NULL данных. – MikeSmithDev

+0

INNER JOIN, похоже, работает. Большое спасибо. – fujisan

ответ

2

Вам необходимо сделать INNER JOIN, если вы не хотите, чтобы сотрудники имели пользовательские данные NULL.

SELECT users.id, 
     employees.id AS empid, 
     users.activated_at, 
     users.created_at 
FROM employees 
     INNER JOIN users 
       ON users.login = employees.employeeid 
WHERE users.activated_at IS NULL 
ORDER BY users.created_at ASC 

The INNER JOIN исключает записи, которые не существуют в обеих таблицах. Таким образом, любой сотрудник, который не имеет пользовательских данных, будет исключен. LEFT JOIN отличается тем, что возвращает все сопоставимые записи из первой таблицы (сотрудников) независимо от того, совпадают ли они с пользователями (там WHERE условие по-прежнему TRUE в этих случаях), поэтому некоторые из них будут иметь полностью NULL пользовательские данные.

+0

Большое спасибо. INNER JOIN, похоже, работает, а также благодарит вас за то, что вы подробно рассказали о том, как работают эти объединения. – fujisan

0

Ваш SQL, кажется, работает для меня: (http://sqlfiddle.com/#!6/0a8ac/1)

+0

Я думаю, что он имел в виду [был это] (http://sqlfiddle.com/#!2/7b729/1), когда есть сотрудник без пользовательских данных. То есть, когда имеет место тип JOIN. – MikeSmithDev

+1

Вы можете быть правы, но он сказал: «Я просто хочу, чтобы пользователи, которые еще не активированы, имеют данные о сотрудниках». Учитывая, что у него есть столбец 'active_at', я думал, что это будет null, когда« еще не активирован »- он даже тестирует это в SQL. Если у него не было ни одной строки пользователей, когда сотрудник не был активирован, но хотел, чтобы этот сотрудник все еще был в результатах, он должен был это сказать. Вздох. – Turophile