这是我的查询
SELECT t.*
FROM `User` `t`
INNER JOIN (
SELECT cv.relatedId
FROM CustomValue cv
WHERE (cv.customFieldId=11 AND (cv.fieldValue like '%dsasda%')) OR (cv.customFieldId=15 AND (cv.fieldValue like '%1%'))
GROUP BY cv.relatedId
HAVING count(*) >= 1
) tblcv ON tblcv.relatedId = t.id
我需要添加一个 AND 条件。我想知道怎么做。
这是数据集。
如蓝色圆圈所示,我需要比较特定 relatedId
的两条记录。
例如,对于相关的 id 4031,我需要检查 customFieldId
= 11 和 fieldValue
像 %dsasda%
和如果 customFieldId
= 15 和 fieldValue
像 '%1%'
所以这个数据集的查询结果应该有 4031
relatedId
作为答案,但我得到了所有 3 个相关的 id 结果。它似乎正在使用 OR CONDITION。
当尝试使用 AND 条件时。我没有得到任何结果。这是 AND 条件。
SELECT cv.relatedId
FROM CustomValue cv
WHERE (cv.customFieldId=11 AND (cv.fieldValue like '%dsasda%')) AND (cv.customFieldId=15 AND (cv.fieldValue like '%1%'))
GROUP BY cv.relatedId
HAVING count(*) >= 1
最佳答案
如果你想同时匹配这两个条件,那么你需要在你的 having 中至少匹配 2 行
HAVING count(*) >= 1
^ remove equality operator
您将取回其他 2 个 id,因为它们每个都匹配 1 行(您已圈出它们)。
如果 (relatedId,fieldValue)
不是唯一的,则使用 distinct
确保每个组都具有两个值。
HAVING count(distinct fieldValue) > 1
关于mysql - 内部连接子查询以从数据透视表中过滤记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33686124/