1

次の問題があります: 1 つのテーブルでデータをカウントし、2 番目のテーブルでデータをカウントし、having 句でカウントを比較し、同じカウントを持つ行のみを表示したいそのようなもの:

SELECT bla
FROM T1 t1 JOIN T2 t2
ON t1.id = t2.id
HAVING COUNT(counted data from table1) = COUNT(counted data from table2)

何か考えはありますか?乾杯

4

2 に答える 2

1

標準SQL:

SELECT t1.bla, t1.id, t1.counter, t2.counter
  FROM (SELECT t1.bla, t1.id, COUNT(counted_data_from_t1) AS counter
          FROM t1
         GROUP BY t1.bla, t1.id
       ) AS t1
  JOIN (SELECT t2.id, COUNT(counted_data_from_t2) AS counter
          FROM t2
         GROUP BY t2.id
       ) AS t2
    ON t1.id = t2.id AND t1.counter = t2.counter

Oracle SQL(Oracleはテーブルエイリアスの前のASを好まないため):

SELECT t1.bla, t1.id, t1.counter, t2.counter
  FROM (SELECT t1.bla, t1.id, COUNT(counted_data_from_t1) AS counter
          FROM t1
         GROUP BY t1.bla, t1.id
       ) t1
  JOIN (SELECT t2.id, COUNT(counted_data_from_t2) AS counter
          FROM t2
         GROUP BY t2.id
       ) t2
    ON t1.id = t2.id AND t1.counter = t2.counter

どこblaから来るかを決める必要があります。指名しましt1た。の任意の値に対してt1.id、の単一の値があると想定していますt1.bla。ない場合は、カウントしているもの、さまざまな列がどこにあるか、テーブルのキーが何であるかをより明確に説明する必要があります。

更新: Oracleタグに気付かず、無効なOracle構文を与えてしまったことをお詫びします。

于 2012-04-10T16:19:08.690 に答える
0
WITH jezyki as 
          (SELECT pseudo_wampira, COUNT(*) AS counter
            FROM Jezyki_obce_w
            GROUP BY pseudo_wampira
          )
    ,sprawnosc as 
         (SELECT pseudo_wampira, sprawnosc, COUNT(*) AS counter
          FROM Sprawnosci_w
         GROUP BY pseudo_wampira, sprawnosc 
         )
      SELECT jezyki.pseudo_wampira, sprawnosc.counter
        FROM jezyki,sprawnosc
       WHERE  jezyki.pseudo_wampira = sprawnosc.pseudo_wampira 
         AND  jezyki.counter = sprawnosc.counter
于 2012-04-10T17:41:13.927 に答える