所以目前我有两张桌子,
1316759001
8390794221
我目前要做的是浏览Servers Admins
------- --------
ServerID AdminID
ServerName AdminFirstName
Server location AdminFirstName
AdminID
表格中的AdminID
列,并将其与Servers
表格中的AdminID
列进行比较。
我想要做的比较是“尚未将哪些管理员分配给服务器?”,以及“哪些服务器还没有为其分配管理员?”
我尝试过以下方法(尝试第一个问题):
Admins
查询返回0结果,应该返回几个。 由于这两个问题都可以用几乎相同的逻辑来回答,因此我只需要在正确的方向上推动它为什么不起作用。
提前致谢
答案 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)