我正在尝试使用此查询:
选择计数(PF.PageID)作为总计,P.PageID 从页面 P 左连接 Pages_Filters PF ON PF.PageID=P.PageID P.PageID 在哪里( (选择页面 ID FROM Pages_Filters 过滤器ID =“1” AND FilterOptionID="2" ), (选择页面 ID FROM Pages_Filters 过滤器ID =“7” AND FilterOptionID="57" ) ) 和 P.PageID !="283" 按 PF.PageID 分组
这会产生错误:
Sub-query returns more than 1 row
我想让 MySQL 合并所有子查询的结果,并在主查询中使用共同的值作为 IN 子句。
因此,如果第一个子查询返回 1,2,4,第二个子查询返回 2,3,4,那么“in”子句将变为:
WHERE P.PageID IN (2,4)
因为 2 和 4 是两个子查询的共同值。
这可以通过一个查询来实现吗?
更新:
我将尝试更好地澄清这个问题。
结果应返回将指定过滤器设置为特定值的所有页面,包括设置了不属于查询的额外过滤器的页面。换句话说,我在一个设置了某些过滤器的页面上,向我展示了我可以从这里访问的所有具有这些相同过滤器的页面,并设置了一个额外的过滤器。
解释起来有点棘手,但我正在寻找一个结果集,该结果集包括具有其他过滤器集的页面,而不是具有相同过滤器 ID 的不同值的页面。
因此,在示例中,我们希望将过滤器 1 设置为值 2 和过滤器 7 设置为 57 的所有页面。我们还希望分配了其他过滤器(除了 1 和 7)的页面,但不希望将过滤器 7 设置为 a 的页面57 以外的值,而不是将过滤器 1 设置为 2 以外的值的页面。
使用样本数据更新
Pages_Filters:
PageID FilterID FilterOptionID 297 2 5 297 7 57 297 9 141 305 2 5 101 2 5 101 7 57
页数:
PageID 页面名称 第297页 305 另一页 101 愚蠢的一页
在这种情况下,我应该能够问,“哪些页面的过滤器 2 设置为 5,过滤器 7 也设置为 57,过滤器 9 也设置为 141”?
答案应该是“只有 297”。