2017-04-20 69 views
2

我有一個表(協會)和重複鍵:合併MySql中具有獨特的SELECT查詢和SELECT COUNT查詢

id | key 
1 | a 
2 | b 
3 | b 
4 | c 
5 | d 
6 | d 

而且我有一個表(產品)的產品:

id | product | type 
1 | product1 | one 
2 | product2 | one 
3 | product3 | two 
4 | product4 | two 
5 | product5 | two 
6 | product6 | two 

現在我只什麼是協會和類型的「兩化」的獨特產品,所以我通過此查詢獲得這些ID的:

SELECT assoc.id, count(*) 
FROM __associations assoc 
GROUP BY assoc.key 
HAVING COUNT(*) <= 1 

哪返回ID 1和4

SELECT prod.id, prod.product, prod.type 
FROM __products prod 
WHERE prod.type = two 

其返回3,4,5和6

但我嘗試這兩個查詢結合起來,獲得ID 4所有失敗:(

回答

1

此查詢應該給您正確的結果:

SELECT prod.id, prod.product, prod.type 
FROM __products prod 
WHERE prod.type = two and prod.id in (SELECT assoc.id  
    FROM __associations assoc 
    GROUP BY assoc.key 
    HAVING COUNT(*) <= 1) 
+0

感謝。在選擇開始時計數(*)是我所有麻煩的過程:SELECT assoc.id,count(*) – user1460314

0

試試這個:

SELECT assoc.id, count(*) 
FROM __associations assoc 
JOIN __products prod ON assoc.id = prod.id 
GROUP BY assoc.key 
HAVING COUNT(*) <= 1 AND 
     COUNT(CASE WHEN prod.type = 'two' THEN 1 END) > 0 

查詢使用其HAVING子句條件骨料,以過濾掉assoc.key組不相關至少一個products紀錄type = 'two'

0

您需要從多個表中進行選擇。

SELECT table1.column1,table2.column2 FROM table1,table2 WHERE table1.column1 = table2.column1;

SQL basics: Query multiple tables

SELECT assoc.id, count(*), prod.product, prod.type FROM __associations assoc, __products prod´ WHERE prod.id = assoc.id AND prod.type = two GROUP BY assoc.key HAVING COUNT(*) <= 1