【发布时间】:2021-03-14 16:27:09
【问题描述】:
我有一个名为entities 的表,它有许多关联的records,而names 和values(还有2 个表)。
我需要在entities 表中找到一条记录,该记录有两条关联记录,条件如下:
- 名称为“Name 1”且值为“Value 1”的一个
- 第二个名称为“Name 2”,值为“Value 2”
现在我有这样无效的 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 具有互斥条件,因此它不返回任何内容。那么问题是如何生成有效的 SQL 来检索所需的记录?
【问题讨论】:
-
您在 name.name 上有两个条件,按照它们的配置方式,它们将始终生成零行结果集。您是否打算通过某些连接从名称中获取两个名称?如果是这样,您将需要以不同的条件对表进行第二次联接才能获得第二个名称。
-
我的查询只是一个想法,是的,它不起作用。我需要找到具有关联名称 = 名称 1 和 values.value = 值 1 的记录的实体以及具有关联名称 = 名称 2 和 values.value = 值 2 的记录。
标签: mysql sql inner-join where-clause having-clause