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

时间:2017-12-20 22:46:49

标签: mysql compare

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

两个表共享相同的结构:

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标题     111 SKU-111 Fizzy Sweets     225 225-SKU NULL

而不是我想要的东西:

product_id sku     title
111        SKU-111 Fizzy Sweets

建议?

1 个答案:

答案 0 :(得分:1)

您还需要检查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