2012-07-20 62 views
1

多個匹配記錄的MySQL選擇記錄我有2個表:那裏有相關表格

頁表包含字段id

pages2categories表中包含的字段pagecategory

我想選擇記錄頁表

where (there is a record in the pages2categories table 
WHERE pages2categories::page = pages::id AND pages2categories:: category = 'X') 
AND (there is also a record in the pages2categories table WHERE pages2categories::page = pages::id AND pages2categories:: category = 'Y') 
AND (there is also a record in the pages2categories table WHERE pages2categories::page = pages::id AND pages2categories:: category = 'Z') 

換句話說,返回a只有在pages2categories表中存在所有三個匹配記錄時,才從pages表中記錄。

例:

頁:: ID

1 

2 

3 

pages2categories ::頁面,pages2categories ::類別

1, x 

1, y 

2, x 

2, y 

2, z 

3, x 

結果應該只返回記錄從2頁表。

我希望這很清楚。謝謝!

+0

什麼應該在的情況下返回這樣的記錄不存在?我在這裏瞄準的是 - 你最後想要得到一個價值清單,是否符合你的要求,或者你是否希望執行檢查,如果一個特定的價值符合你上面提到的要求。 – Cninroh 2012-07-20 20:46:51

回答

0

您也可以使用此:

SELECT * FROM TABLE1 A 
WHERE EXISTS (SELECT * FROm TABLE2 B WHERE A.ID = B.ID AND B.category = 'X') 
AND EXISTS (SELECT * FROm TABLE2 B WHERE A.ID = B.ID AND B.category = 'Y') 
AND EXISTS (SELECT * FROm TABLE2 B WHERE A.ID = B.ID AND B.category = 'Z') 
+0

這工作完美。謝謝!我不知道它是否比其他解決方案的效率更高或更低,但爲了我的目的,效率並不那麼重要,而且這是最容易理解的。 – 2012-07-21 01:00:02

0
select id from table 
group by id 
where count(distinct category) = (select count(distinct category) from table) 
1

在你的問題,你寫道:

換句話說,從頁表中返回的記錄只有在所有三個匹配的記錄存在在pages2categories表中。

您還寫道,查詢應該返回2行與您提供的示例數據,但根據您的數據,只有一行包含所有3個類別(頁面2)。

所以,我不知道我的理解是正確但這裏的完成它的一種方式:

SELECT p.* FROM page p 
LEFT JOIN pages2categories cx ON (cx.page = p.id AND cx.category = 'x') 
LEFT JOIN pages2categories cy ON (cy.page = p.id AND cy.category = 'y') 
LEFT JOIN pages2categories cz ON (cz.page = p.id AND cz.category = 'z') 
WHERE cx.category IS NOT NULL 
AND cy.category IS NOT NULL 
AND cz.category IS NOT NULL