不存在条款

时间:2013-11-11 02:57:26

标签: mysql sql

我有一个名为“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代码不起作用?

3 个答案:

答案 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