Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 可空外键_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 可空外键

Sql 可空外键,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有以下sql语句: SELECT Useraccount.Name, Company.Name FROM Useraccount, Company WHERE Useraccount.CompanyId = Company.ID 此语句显示所有用户帐户名及其公司名称 但我也有一些用户帐户,其中companyId为0,我也希望显示它们(在本例中,公司名称可能是空字符串)。 我如何才能做到这一点?使用左连接: SELECT Useraccount.Name, Company.N

我有以下sql语句:

SELECT Useraccount.Name, Company.Name  
 FROM Useraccount, Company
WHERE Useraccount.CompanyId = Company.ID
此语句显示所有用户帐户名及其公司名称

但我也有一些用户帐户,其中companyId为0,我也希望显示它们(在本例中,公司名称可能是空字符串)。
我如何才能做到这一点?

使用
左连接

SELECT 
  Useraccount.Name, 
  Company.Name  
FROM Useraccount
LEFT JOIN Company ON Useraccount.CompanyId = Company.ID;
您正在使用旧的
JOIN
语法对这两个表进行
internaljoin
操作。请避免使用这种旧的联接语法,并使用ANSI SQL-92显式语法,使用
join
关键字。有关更多信息,请参见此:

有关不同联接类型的详细信息:


A
LEFT JOIN
将为您带来以下好处:

SELECT Useraccount.Name, Company.Name  
FROM Useraccount
 LEFT JOIN Company ON Useraccount.CompanyId = Company.ID
你可以用-

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

当您使用左联接时,无论行的匹配状态如何,都将从左表中获取所有行

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

不要使用
0
。我不喜欢它们,但这就是
NULL
的用途。如果将0转换为null,则可以添加显式外键约束。