2014-06-22 83 views
0

我有兩個表:Mysql的尋找到給定的值在所有子記錄發現父記錄

Parent: 
+-----------+-----------+ 
| parent_id | something | 
+-----------+-----------+ 
|  123 | x   | 
|  231 | y   | 
|  455 | z   | 
+-----------+-----------+ 

Relations: 
+-----+----------+--------------+--------------+ 
| id | parent_id| option_name | option_value | 
+-----+----------+--------------+--------------+ 
| 1 |  123 | Colors  | aaa   | 
| 2 |  231 | Colors  | bbb   | 
| 3 |  456 | Colors  | aaa   | 
| 4 |  456 | Country  | ddd   | 
+-----+----------+--------------+--------------+ 

我想要做的,是採取從在關係表我想所有選項父的所有行:

如:

SELECT * FROM Parent P 
LEFT JOIN Relations R ON R.parent_id = P.parent_id 
WHERE option_name = Colors 
AND option_value = aaa 
AND option_name = Country 
AND option_value = ddd 

以上查詢我想一行PARENT_ID 455退回,因爲它有兩個選項。

PS: - 上面的查詢是錯誤的,我給它只是作爲我想要做 一個例子 - 我將有超過2個選項 - >其實際上從1到無限

我覺得這可以通過左連接來完成(對於每個需要的選項,添加一個不同的左連接......但總有一天選項表可能會達到數百萬條記錄,而且我不知道該查詢的優化程度如何)

回答

0

您可以使用HAVING:

SELECT *, count(option_name) AS total FROM Parent P 
LEFT JOIN Relations R ON R.parent_id = P.parent_id 
WHERE (option_name = Colors 
AND option_value = aaa) 
OR (option_name = Country 
AND option_value = ddd) 
HAVING total > 1 

您更改HAVING條件以查找您正在尋找的選項數量

相關問題