2017-04-20 23 views
2

をマージは、私はユニークとMySQLでのテーブル(連想)を持っており、キーを複製SELECTクエリとSELECT COUNTクエリ

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

今、私はどのような団体やタイプにユニークである製品の2つの「私はこのクエリによって、それらのIDを取得:

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

返しID 1と4と

3,4,5および6

を返す

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

しかし、これらの2つのクエリを結合し、すべてが失敗した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 

クエリはtype = 'two'少なくとも一つproductsレコードに関連していないassoc.keyグループを除外するために、そのHAVING句の条件集計を使用します。

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

関連する問題