我有两个表:
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的行,因为它有两个选项。
P.S: - 上面的查询是错误的,我给出它只是作为我想做的事情的一个例子 - 我将有超过 2 个选项 -> 实际上从 1 到无限
我认为这可以通过左连接来完成(对于每个需要的选项,添加不同的左连接......但是选项表有一天可能会达到数百万条记录,我不知道这个查询将如何优化)
最佳答案
您可以使用 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 条件来查找您要查找的选项数量
关于Mysql查找父记录,其中给定值在所有子记录中找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24350411/