2012-04-10 119 views
1

我有以下問題: 我想指望在一個表中的數據,算上第二表數據和having子句比較countings,並且只顯示具有相同countings 類似的東西行:2X COUNT在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) 

你有什麼想法嗎? 乾杯

+1

計數什麼?從T1中選擇count(*)將返回總行數,並且不能將其應用於檢查其他表中的行,您能否詳細說明一下? – Habib 2012-04-10 16:13:54

回答

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不表別名之前像):

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語法。

+0

我這樣做了,但我有一個錯誤(第5行,第9列,SQL命令未正確結束) 'SELECT jezyki.pseudo_wampira,sprawnosc.counter FROM(SELECT pseudo_wampira,COUNT(*)AS counter FROM Jezyki_obce_w GROUP BY pseudo_wampira )AS jezyki JOIN(SELECT pseudo_wampira,sprawnosc,COUNT(*)AS計數器 FROM Sprawnosci_w GROUP BY pseudo_wampira,sprawnosc )AS sprawnosc ON(jezyki.pseudo_wampira = sprawnosc.pseudo_wampira和jezyki.counter = sprawnosc.counter)' 你看到那個錯誤嗎? – robocoder 2012-04-10 16:55:24

+0

對不起,我在編寫評論時遇到了問題。代碼有像你這樣的表;第五行是「)AS jezyki」 – robocoder 2012-04-10 16:56:04

+2

@robocoder - Oracle不允許你爲表別名使用'AS',儘管它爲列別名提供了服務。嘗試刪除那個單詞,所以第5行變成了')t1'和第9行't2'。 – 2012-04-10 17:18:08

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