2013-08-16 45 views
0

我有以下兩個表送一如果在一個表中的行的數量是在其他表等於行數

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 

我想要的結果返回1類標識碼= 1 & 3和0類標識碼= 2,即如果表a中的行數等於表b中的行數,則查詢應該返回1。

+0

你能不能請您製表的結果,所以它很容易interprete? – Cris

+0

我想要查詢結果1當我運行它爲CLASS_ID = 1,不希望整個表的表格結果 – user2613027

回答

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。如果其中只有一個可能缺少一些class_ID,則可以使用LEFT或RIGHT JOIN,具體取決於它可能是哪個(並使用IFNULL(Xcount, 0)作爲該表的計數)。如果其中任何一個可能缺少一些,則需要一個FULL JOIN,但MySQL不支持它。如果您搜索,您可以找到解決方法。

如果你只是想在同一時間做一個類ID,這是更簡單:

select (select count(*) from TableA where Class_ID = 1) = 
     (select count(*) from TableB where Class_Id = 1) as count_matches 
+0

感謝您的響應,但我不希望整個表的結果,但對於特定的Class_ID – user2613027

+0

然後把一個WHERE子查詢中的子句。 – Barmar

+0

爲特定的Class_ID – Barmar

相關問題