在SQL左联接中删除重复项

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在SQL左联接中删除重复项相关的知识,希望对你有一定的参考价值。

我想从左联接中删除重复的结果。由于商店中有几种“ schnapp”类型,因此结果是列出了许多相同的商店。我只想看看商店是否携带任何类型的“烈酒”。我将如何获得不同的商店名称?

下面是我写的内容:

SELECT stores.name, sales.category_name
FROM stores LEFT JOIN
     sales
     ON sales.store = stores.store
WHERE category_name ILIKE '%schnapp%'

提前感谢!

答案

我只想看看商店是否带有任何类型的'schnapp's。我将如何获得不同的商店名称?

一个简单的方法是:

SELECT DISTINCT st.name
FROM stores st LEFT JOIN
     sales s
     ON s.store = st.store
WHERE s.category_name ILIKE '%schnapp%';

更好的方法是exists

select st.*
from stores st
where exists (select 1
              from sales s
              where s.store = st.store and
                    s.category_name ilike '%schnapp%'
             );

这避免了外部聚集,因此可能更快。

以上是关于在SQL左联接中删除重复项的主要内容,如果未能解决你的问题,请参考以下文章

SQL Left Join 仅第一个匹配项

删除左表上的重复项,同时在右表SELECT JOIN上保留重复项

Oracle 完全联接中的重复项 [重复]

使用内部联接删除一行数据[重复]

Access SQL 中的联接语句

Linq中向实体左联接的Sql查询