高性能MySQL

MySQL DISTINCT 的疑问

2019-07-26  本文已影响1人  Sam_6155

使用LEFT JOIN

-- 方案1 先去重,再联结,符合正常思路
SELECT * FROM
(SELECT DISTINCT 用户ID FROM 用户购买20110901) A
LEFT JOIN
(SELECT DISTINCT 用户ID FROM 用户购买20110902) B
ON A.用户ID = B.用户ID;
-- 方案2 先联结 再去重,疑问点在于 只能再SELECT添加一个DISTINCT函数
SELECT DISTINCT A.用户ID,B.用户ID
FROM 用户购买20110901 AS A LEFT JOIN 用户购买20110902 AS B
ON A.用户ID = B.用户ID;
两则得出的结果是一样的,但是方案一 更符合正常的思路。

使用RIGHT JOIN

-- 方案1 先去重,再联结,符合正常思路
SELECT * FROM
(SELECT DISTINCT 用户ID FROM 用户购买20110901) A
RIGHT JOIN
(SELECT DISTINCT 用户ID FROM 用户购买20110902) B
ON A.用户ID = B.用户ID;
-- 方案2 先联结 再去重,疑问点在于 只能再SELECT添加一个DISTINCT函数
SELECT DISTINCT A.用户ID,B.用户ID
FROM 用户购买20110901 AS A RIGHT JOIN 用户购买20110902 AS B
ON A.用户ID = B.用户ID;
两则得出的结果是一样的,但是方案一 更符合正常的思路。

使用INNER JOIN

-- 方案1 先去重,再联结,符合正常思路
SELECT * FROM
(SELECT DISTINCT 用户ID FROM 用户购买20110901) A
INNER JOIN
(SELECT DISTINCT 用户ID FROM 用户购买20110902) B
ON A.用户ID = B.用户ID;
-- 方案2 先联结 再去重,疑问点在于 只能再SELECT添加一个DISTINCT函数
SELECT DISTINCT A.用户ID,B.用户ID
FROM 用户购买20110901 AS A INNER JOIN 用户购买20110902 AS B
ON A.用户ID = B.用户ID;
两则得出的结果是一样的,但是方案一 更符合正常的思路。

上一篇 下一篇

猜你喜欢

热点阅读