2012-04-10 116 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