我有一个名为“contas”的表和另一个名为“cartoes”的表我需要验证表contas中不存在“IDCARTAO”,例如:“如果我有一个带有cartoes.IDCARTAO = 1的容器,结果需要是2和3“;
SELECT cartoes.IDCARTAO
from cartoes
WHERE NOT EXISTS(SELECT *
from cartoes
LEFT OUTER JOIN contas ON (cartoes.IDCARTAO = contas.IDCARTAO)
WHERE contas.IDCARTAO = cartoes.IDCARTAO)
为什么这个sql代码不起作用?
答案 0 :(得分:0)
你在找这个吗?
SELECT IDCARTAO
FROM cartoes c
WHERE NOT EXISTS
(
SELECT *
FROM contas
WHERE IDCARTAO = c.IDCARTAO
)
答案 1 :(得分:0)
微小的调整:尝试使用not exists
而不是not in
。如... ...
SELECT ct.IDCARTAO
from cartoes ct
WHERE ct.idcartao not in
(SELECT c.idcartao from contas c)
答案 2 :(得分:0)
我不认为这是如何运作的。 在您的情况下,该查询将返回cartoes表中的所有记录,其中给定IDCARTAO的cartas表中没有记录。
您已经有3个选项,如果您想要使用某些特定的IDCARTAO过滤记录(意味着您有一个IDCARTAO的静态列表),请使用 in 。否则我会使用@peterm的答案,因为当子查询结果很大时它会更快。
有关详情,请点击EXISTS Condition