SQL:查找连接到单个 table 的记录,其中同一列具有不同的值

SQL: Find a record joined to a single table where same column has different values

我有一个名为 entities 的 table,它有许多关联的 records,而 records 又有 namesvalues(另外 2 个 tables).

我需要在 entities table 中找到一条记录,该记录有两条符合以下条件的关联记录:

目前我有这样的无效SQL:

SELECT entities.id
FROM   `entities`
       INNER JOIN `records`
               ON `records`.`entity_id` = `entities`.`id`
       INNER JOIN `names`
               ON `names`.`id` = `records`.`name_id`
       INNER JOIN `values`
               ON `values`.`record_id` =`records`.`id`
WHERE  
           `names`.`name` = 'Name 1'
       AND `names`.`resource_type` = 'Type'
       AND ( values.value LIKE '%Value 1%' )
       AND `names`.`name` = 'Name 2'
       AND `names`.`resource_type` = 'Type'
       AND ( values.value LIKE '%Value 2%' )  

这个 SQL 有互斥条件,结果 returns 什么都没有。所以问题是如何生成有效的 SQL 来检索所需的记录?

您的查询 returns 没有行,因为 WHERE 子句中存在冲突条件。如果我没看错,您可以使用 HAVING 子句进行聚合和过滤。

SELECT e.id
FROM entities e
INNER JOIN records r ON r.entity_id = e.id
INNER JOIN names n   ON n.id = r.name_id
INNER JOIN values v  ON v.record_id =r.id
WHERE n.resource_type = 'Type'
GROUP BY e.id
HAVING MAX(n.name = 'Name 1' AND v.value LIKE '%Value 1%') = 1
   AND MAX(n.name = 'Name 2' AND v.value LIKE '%Value 2%') = 1