2

t1 と比較して、t2 のサブセットに新しいタプルがいくつあるかを数えてみました。

SELECT
  COUNT(t2.id)
FROM (
  (SELECT id, col1 FROM t2 WHERE col2=0 AND col3=0) AS t
  LEFT OUTER JOIN
    t1
  ON
    t.id=t1.id
)
WHERE
  t1.id IS NULL;

サブセットは次のように定義されます

(SELECT id, col1 FROM t2 WHERE col2=0 AND col3=0) AS t

しかし、上記のプログラムは動作しないようで、エラーが発生します。

4

3 に答える 3

2

FROMで句を囲む必要はありません()t2.id集計で参照してCOUNT()いますが、リストはカプセル化するサブクエリからSELECTのみ生成されます。このバージョンでは、エラーの原因に対処しています。t.idt2

SELECT
  COUNT(t.id) AS idcount
FROM 
  (SELECT id, col1 FROM t2 WHERE col2=0 AND col3=0) AS t
  LEFT OUTER JOIN t1 ON t.id = t1.id
WHERE t1.id IS NULL

でも:

サブクエリは実際には非常に単純なので、まったく必要ないと思います。すべてを次のように実行できますLEFT JOIN

SELECT
  /* The equivalent of COUNT(*) in this context */
  COUNT(t2.id) AS idcount
FROM
  t2 
  LEFT OUTER JOIN t1 ON t2.id = t1.id
WHERE
  t1.id IS NULL
  AND (t2.col2 = 0 AND t2.col3 = 0)
于 2012-07-18T21:57:21.760 に答える
1

問題はエイリアスです。あなたが持っている:

select count(t2.id)

ただし、t2はサブクエリで定義されているため、範囲外です。

あなたが欲しい:

select count(t.id)
于 2012-07-18T21:57:59.240 に答える
1

本当に COUNT(t.id) を実行したくないですか? t2 はサブクエリ内にあり、メイン クエリでは使用できません。t と t1 のみが使用可能です。

于 2012-07-18T21:56:27.577 に答える