0

次の2つのテーブルがあります

table a->
Class_ID  |  name  | class
1         |  abc   | a
1         |  def   | a
2         |  ghi   | b
2         |  jkl   | b
2         |  mno   | b
3         |  pqr   | c
3         |  stu   | c

table b->
Class_ID  |  class
1         |  a
1         |  a
2         |  b
2         |  b
3         |  c
3         |  c

結果が CLASS_ID = 1 & 3 の場合は 1 を返し、CLASS_ID = 2 の場合は 0 を返します。つまり、テーブル a の行数がテーブル b の行数と等しい場合、クエリは 1 を返す必要があります。

4

1 に答える 1

1
select Class_ID, acount = bcount as count_matches
from (select Class_ID, COUNT(*) acount
      from TableA
      group by Class_ID) a
JOIN (select Class_ID, COUNT(*) acount
      from TableB
      group by Class_ID) b
USING (Class_ID)

このクエリは、テーブルに欠落しているクラス ID がないことを前提としていることに注意してください。それらの 1 つだけでいくつかの class_ID が欠落している可能性がある場合は、どちらであるかに応じて、LEFT または RIGHT JOIN を使用できます (そしてIFNULL(Xcount, 0)、そのテーブルからのカウントに使用します)。いずれかが欠けている可能性がある場合は、FULL JOIN が必要ですが、MySQL はそれをサポートしていません。SO を検索すると、回避策が見つかります。

一度に 1 つのクラス ID に対してのみ実行したい場合は、さらに簡単です。

select (select count(*) from TableA where Class_ID = 1) =
       (select count(*) from TableB where Class_Id = 1) as count_matches
于 2013-08-16T04:55:50.960 に答える