0

我有一个名为“contas”的表和另一个名为“cartoes”的表我需要验证表 contas 中不存在什么“IDCARTAO”,如下所示:“如果我有一个带有 cartoes.IDCARTAO = 1 的 conta,则结果需要为 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代码不起作用?

4

3 回答 3

0

你在找这个吗?

SELECT IDCARTAO 
  FROM cartoes c
 WHERE NOT EXISTS
(
  SELECT *
    FROM contas
   WHERE IDCARTAO = c.IDCARTAO
)
于 2013-11-11T03:00:36.683 回答
0

微小的调整:不要使用not exists,而是尝试not in。如...

SELECT ct.IDCARTAO 
from cartoes ct
WHERE ct.idcartao not in 
  (SELECT c.idcartao from contas c)
于 2013-11-11T03:03:21.610 回答
0

我不认为它是这样工作的。在您的情况下,该查询将返回 cartoes 表中的所有记录,其中 cartas 表中没有给定 IDCARTAO 的记录。

您已经有 3 个选项,如果您想使用某些特定的 IDCARTAO 过滤记录(意味着如果您有 IDCARTAO 的静态列表),请使用in。否则我会使用@peterm 的答案,因为当子查询结果很大时它会更快。

如需更多参考,请点击EXISTS Condition

于 2013-11-11T03:36:03.313 回答