2009-02-14 2 views
1

Я немного новичок базы данных, поэтому помилуй мою наивность здесь. я следующий SQL заявление:Извлечение всех записей - Внутреннее соединение

SELECT DISTINCT dbo.tb_user.familyName, 
dbo.user_email.email FROM dbo.tb_user 
INNER JOIN dbo.user_email ON (dbo.tb_user.id = dbo.user_email.userID) 

Это возвращает записи, где адрес электронной почты существует.

Что я хотел бы сделать, это получить все записи, чтобы я мог видеть, какие пользователи делают и не имеют адреса электронной почты, записанного в db.

Возможно ли это?

Любые подсказки/помощь очень ценятся.

ответ

7

Вы должны использовать левое внешнее соединение ..

SELECT DISTINCT dbo.tb_user.familyName,dbo.user_email.email 
FROM dbo.tb_user LEFT OUTER JOIN dbo.user_email 
ON (dbo.tb_user.id = dbo.user_email.userID) 
3

то, что вы хотите, называется «внешнее соединение». Во внешнем соединении порядок, в котором перечислены таблицы, в отличие от внутреннего соединения, которое вы указали. Второй, указанный в списке, является внешним и покажет NULL те случаи, когда нет совпадения (по крайней мере, в MySQL, единственное место, где я использовал внешние соединения до сих пор.)

SELECT DISTINCT dbo.tb_user.familyName, dbo.user_email.email ОТ dbo.tb_user ЛЕВЫЙ OUTER JOIN dbo.user_email ON (dbo.tb_user.id = dbo.user_email.userID)

0

пробуйте это работает ....

SELECT DISTINCT tb_user.familyName, 
       user_email.email 
FROM tb_user 
LEFT JOIN user_email 
ON tb_user.id = user_email.userID 
Смежные вопросы