比较两个表列以查看缺少哪个表

时间:2015-08-20 18:13:42

标签: sql

所以目前我有两张桌子,

1316759001
8390794221

我目前要做的是浏览Servers Admins ------- -------- ServerID AdminID ServerName AdminFirstName Server location AdminFirstName AdminID 表格中的AdminID列,并将其与Servers表格中的AdminID列进行比较。 我想要做的比较是“尚未将哪些管理员分配给服务器?”,以及“哪些服务器还没有为其分配管理员?”

我尝试过以下方法(尝试第一个问题):

Admins

查询返回0结果,应该返回几个。 由于这两个问题都可以用几乎相同的逻辑来回答,因此我只需要在正确的方向上推动它为什么不起作用。

提前致谢

2 个答案:

答案 0 :(得分:1)

您的查询对我来说是正确的,但我倾向于尽可能避免使用NOT IN,因为我通常会通过以下查询获得更好的性能:

select adminId, adminfirstname, adminlastname
from admins a
left join servers s on a.adminId = s.adminId
where s.adminId is null

以上是相同的想法,仅使用联接并仅显示未成功加入的结果。

另一个可以写成:

select serverId, serverName, [server location]
from servers
where adminId is null

答案 1 :(得分:0)

您的查询似乎是正确的。

这可能是由于以下几点:

  • 所有管理员实际上都已分配到服务器

  • 您不在正确的数据库上执行查询...

  • ID列的内容有问题:如果它不是INTEGER,它可能在两个表之一中包含空格或其他非所需字符,并且它不匹配数据库系统。尝试TRIM()Id例如

  • 根据您的数据库系统,最好明确编写表名,因为您在多个表中具有相同的字段名称

例如:

SELECT CONCAT(AdminLastName,',',AdminFirstName)
FROM Admins
WHERE TRIM(Admins.AdminID) NOT IN(SELECT TRIM(Servers.AdminID) FROM Servers)