2013-03-17 2 views
0

У меня есть следующий SQL заявление:Nullable внешний ключ

SELECT Useraccount.Name, Company.Name 
FROM Useraccount, Company 
WHERE Useraccount.CompanyId = Company.ID 

Это утверждение показывает все UserAccount-имена и название своей компании.

Но у меня также есть учетные записи, в которых companyId равно 0, и я бы хотел, чтобы они отображались тоже (название компании может быть пустой строкой в ​​этом случае). Как я могу это сделать?

+0

Использовать соединение LEFT. –

+0

И не используйте '0'. Мне они не нравятся, но это то, на что «NULL». Вы можете добавить явное ограничение внешнего ключа, если вы преобразуете 0s в Nulls. –

ответ

1

Использование LEFT JOIN вместо:

SELECT 
    Useraccount.Name, 
    Company.Name 
FROM Useraccount 
LEFT JOIN Company ON Useraccount.CompanyId = Company.ID; 

Вы были INNER JOIN ИНГ две таблицы со старым JOIN синтаксиса. Пожалуйста, избегайте этого старого синтаксиса соединения и используйте явный синтаксис ANSI SQL-92 с использованием ключевого слова JOIN. Смотрите это для получения дополнительной информации:

Для получения дополнительной информации о различных типах присоединиться:

+0

Большое спасибо. – mosquito87

+0

@ mosquito87 - Добро пожаловать в любое время :) –

1

LEFT JOIN будет делать трюк для вас:

SELECT Useraccount.Name, Company.Name 
FROM Useraccount 
LEFT JOIN Company ON Useraccount.CompanyId = Company.ID 
0

Вы можете использовать -

SELECT Useraccount.Name, Company.Name 
FROM Useraccount, Company 
WHERE Useraccount.CompanyId = Company.ID or Useraccount.CompanyId =0 
0

При использовании LEFT JOIN, вы получите все строки из левой таблицы независимо статуса соответствия строк.

SELECT 
Useraccount.Name AS UserAccountName, 
Company.Name AS CompanyName 
FROM Useraccount 
LEFT JOIN Company 
ON Useraccount.CompanyId = Company.ID; 
+0

Привет, не могли бы вы объяснить, как и почему эта работа? –

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