mysql - 内部连接子查询以从数据透视表中过滤记录

标签 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 条件。我想知道怎么做。

这是数据集。

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

最佳答案

如果你想同时匹配这两个条件,那么你需要在你的 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/

相关文章:

python - 从 ordereddict 格式化我的 sql-insert 语句时,数据只有 1 个字符,而不是 ordereddict 的键/值

mysql - 我可以在 CAST() 方法中使用 SUBSTR() 吗?

mysql - 在 Doctrine 中定义 SQL 查询结果的顺序

sql - 如何从sql表中获取子字符串?

mysql - SQL where IS NULL 返回数据不为 NULL 的行

mysql - 在连接条件上使用 IS NULL 或 IS NOT NULL - 理论问题

mysql - 表结构 - 将一个学生与多个类(class) ID 联系起来

IN() 中的 MySQL 子查询

Sql 从另一个表更新记录

sql - 如何在 ADO.NET 中设置 XACT_ABORT