我有三个表: sites、features和site_feature " sites“表如下:sites
+-----+--------+
|id | name |
+-----+--------+
| 1 | site1 |
| 2 | site2 |
| 3 | site3 |
| 4 | site4 |
| 5 | site5 |
| 6 | site6 |
| 7 | site7 |
| 8 | site8 |
+-----+--------+“feature”表如下所示:
+-----+--------+
|id | feature|
+-----+--------+
| 1 | fea1 |
| 2 | fea2 |
| 3 | fea3 |
| 4 | fea4 |
| 5 | fea5 |
| 6 | fea6 |
| 7 | fea7 |
| 8 | fea8 |
+-----+--------+类似下面的" site_feature“表:site_feature
+-----+--------+------------+
|id | site_id| feature_id |
+-----+--------+------------+
| 1 | 1 | 1 |
| 2 | 1 | 4 |
| 3 | 2 | 1 |
| 4 | 2 | 2 |
| 5 | 2 | 5 |
| 6 | 3 | 1 |
| 7 | 3 | 4 |
| 8 | 4 | 7 |
| 9 | 5 | 8 |
+-----+--------+------------+我想得到的网站,其中有多个功能我选择,例如,我想列出的网站与功能fea1和fea4。
如何构建此查询?提前感谢!
发布于 2014-05-08 04:44:39
如果您想要具有两个特定功能的站点,并且这些站点既可以具有指定的两个特定功能,也可以具有其他功能,则可以使用带有having的group by
select sf.site_id
from site_feature sf join
feature f
on sf.feature_id = f.id
where f.feature in ('fea1', 'fea4')
group by sf.site_id
having count(distinct f.feature) = 2;如果要将其扩展到其他特性,请将它们添加到where子句列表中,并递增2值。
发布于 2014-05-08 04:41:49
您可以使用GROUP BY操作,如下所示:
SELECT
site_id,
count(*)
FROM site_feature
GROUP BY site_id
HAVING count(*) > 1;下面是组函数的。
https://stackoverflow.com/questions/23527960
复制相似问题