内部联接与子查询以从数据透视表中筛选记录

时间:2015-11-13 04:49:02

标签: 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.relatedId
     HAVING count(*) >= 1
) tblcv  ON  tblcv.relatedId = t.id

我需要添加AND CONDITION。我想知道如何。

这是数据集。

enter image description here

如蓝色圆圈所示,我需要与特定relatedId的两个记录进行比较。

例如,对于相关的ID 4031,我需要检查customFieldId = 11和fieldValue是否%dsasda%以及customFieldId = 15和fieldValue是否相同'%1%'

因此,对此数据集的查询结果应该有4031 relatedId作为答案,但我得到所有3个相关的ID结果。它好像在使用OR CONDITION。

enter image description here

尝试使用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

1 个答案:

答案 0 :(得分:1)

如果您想匹配这两个条件,那么您需要匹配至少2行

HAVING count(*) >= 1
                 ^ remove equality operator

你正在找回另外两个id,因为它们各自匹配1行(你已经圈出了它们)。

如果(relatedId,fieldValue)不唯一,请使用distinct确保每个组都包含这两个值。

HAVING count(distinct fieldValue) > 1