0

「contas」というテーブルと「cartoes」という別のテーブルがあります。次のように、テーブル contas に「IDCARTAO」が存在しないことを確認する必要があります。 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

私はそれがどのように機能するとは思わない。あなたの場合、そのクエリは、指定された IDCARTAO の cartas テーブルにレコードがない cartoes テーブルからすべてのレコードを返します。

すでに 3 つのオプションがあります。特定の IDCARTAO でレコードをフィルタリングする場合 (IDCARTAO の静的リストがある場合)、 in を使用ます。それ以外の場合は、サブクエリの結果が大きい場合に高速になるため、@peterm からの回答を使用します。

詳細については、EXISTS 条件をクリックしてください。

于 2013-11-11T03:36:03.313 に答える
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 に答える