Mysql 使用子查询的内部联接从透视表中筛选记录
这是我的问题Mysql 使用子查询的内部联接从透视表中筛选记录,mysql,sql,Mysql,Sql,这是我的问题 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.relatedI
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
我需要添加一个和条件。我想知道怎么做
这是数据集
如蓝色圆圈所示,我需要对特定的relatedId
的两条记录进行比较
例如,对于相关id 4031,我需要检查customFieldId
=11和fieldValue
是否像%dsasda%
一样,以及customFieldId
=15和fieldValue
是否像“%1%”
因此,这个数据集的查询结果应该有4031
relatedId
作为答案,但我得到了所有3个相关id结果。它似乎是在使用或状态
当尝试使用和调节时。我没有得到任何结果。这是有条件的
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 count(*) >= 1
^ remove equality operator
你要找回另外两个id,因为它们每一行都匹配1行(你已经圈出了它们)
如果(relatedId,fieldValue)
不是唯一的,则使用distinct
确保每个组都有这两个值
HAVING count(distinct fieldValue) > 1