【发布时间】:2020-10-26 10:13:00
【问题描述】:
有人可以帮我查询以下要求吗?
对于上面的两个表,我在左连接查询下面写了
select distinct result
from a
left join b on a.number = b.reference
where a.color='red' and b.value != '10'
此查询返回 1 和 2 作为输出。
但我希望只有 2 作为输出,因为表 b 中的 list1 具有值:10,因此如果列表中的值匹配,则查询不应返回行。
【问题讨论】:
-
distinct不是一个函数,它是一个 set-quantifier,适用于整个选定的行。跳过那些额外的括号,只需写select distinct result from ...以使代码更清晰。 -
您的查询的行为与指定的完全一样,因为它将表 a 中的 'red/list1' 行与表 b 中的所有 'list1' 行匹配(值 10 的行除外!)和同样,“red/list2”行将匹配表 b 中的所有“list2”行。因此,表 a 中的两个“红色”行在表 b 中都有多个匹配项,并且当您将 DISTINCT 应用于结果集时,您会同时返回 1 和 2。如果您尝试使用 SELECT * 而不是 SELECT DISTINCT RESULT 进行查询,那么应该清楚发生了什么。
标签: mysql sql subquery left-join where-clause