比较数据集与左连接但防止空值影响结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了比较数据集与左连接但防止空值影响结果相关的知识,希望对你有一定的参考价值。

假设我有两个数据表,我希望比较并从第一个表中找到唯一的行。

两个表共享相同的结构:

product_id mediumint(9) PRIMARY KEY
sku varchar(20) DEFAULT ''
title text DEFAULT ''

table_one示例数据:

product_id sku     title
111        SKU-111 Fizzy Sweets
222        SKU-222 Fizzy Pop
225        225-SKU NULL

table_two示例数据

product_id sku     title
111        SKU-111 Sweets
222        SKU-222 Fizzy Pop
225        225-SKU NULL

我使用以下查询从第一个表中查找唯一行:

SELECT a.product_id, a.sku, a.title FROM table_one a LEFT JOIN table_two b ON a.product_id = b.product_id AND a.sku = b.sku AND a.title = b.title WHERE b.sku IS NULL;

其结果如下:product_id sku title 111 SKU-111 Fizzy Sweets 225 225-SKU NULL

而不是我想要的东西:

product_id sku     title
111        SKU-111 Fizzy Sweets

建议?

答案

你还需要检查a.title IS NOT NULL的位置。

SELECT a.product_id, a.sku, a.title, b.title as t2 
FROM table_one a 
LEFT JOIN table_two b ON (
    a.product_id = b.product_id 
    AND a.sku = b.sku AND a.title = b.title
)
WHERE b.title IS NULL
AND a.title IS NOT NULL

SQL小提琴http://sqlfiddle.com/#!9/2a496a/6

以上是关于比较数据集与左连接但防止空值影响结果的主要内容,如果未能解决你的问题,请参考以下文章

内连接与左外链接的区别

将数据集与 plotly 进行比较 - 用实线混合虚线

sqlServer 2005 中内连接(inner join)与左连接(left join)的区别?最好附加个实例?

sql四种连接方式

Clickhouse 数组连接与左连接和计算计数

将 concat 和 sum 与左连接 mysql 分组