这是我的查询
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 CONDITION。我想知道如何。
这是数据集。
如蓝色圆圈所示,我需要与特定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
答案 0 :(得分:1)
如果您想匹配这两个条件,那么您需要匹配至少2行
HAVING count(*) >= 1
^ remove equality operator
你正在找回另外两个id,因为它们各自匹配1行(你已经圈出了它们)。
如果(relatedId,fieldValue)
不唯一,请使用distinct
确保每个组都包含这两个值。
HAVING count(distinct fieldValue) > 1