我需要从表中删除重复项,但MySQL无法正常工作
Create table emp
( empID INT(5) PRIMARY KEY,
Pref01 int(1),
Pref02 int(1),
Pref03 int(1),
Pref04 int(1))
empID, Pref01, Pref02, Pref03, Pref04 ===================================== 00011 1 2 0 0 00011 1 3 0 0 00022 1 1 0 0 00022 0 3 0 0
我需要保留这些记录
00011 1 3 0 0 00022 0 3 0 0
我还需要保留所有pref null值的记录 这是我的sql:
select empID
FROM emp
where max(Pref01) or max (Pref02) or max(Pref03) or max(Pref04)
or Pref01 is null or Pref02 is null or Pref03 is null or Pref04 is null
答案 0 :(得分:0)
您可以使用GROUP BY
和GREATEST
SELECT empID, max(GREATEST(Pref01, Pref02, Pref03, Pref04)) FROM emp GROUP BY empID
您可以使用此功能直接在emp表中使用exists
或in
答案 1 :(得分:0)
你的问题非常复杂,有了给定的信息,我必须做出假设才能回答它。
假设没有相同empID
的记录具有相同的最大pref数...
SELECT A.*
FROM emp AS A
INNER JOIN (
SELECT empID, MAX(GREATEST(Pref01, Pref02, Pref03, Pref04)) AS MaxPref
FROM emp GROUP BY empID
) AS B ON A.empID = B.empID
WHERE
(Pref01 = MaxPref OR Pref02 = MaxPref OR Pref03 = MaxPref OR Pref04 = MaxPref)
OR
(Pref01 IS NULL AND Pref02 IS NULL AND Pref03 IS NULL AND Pref04 IS NULL)
如果假设不正确,那么代码仍然会显示empID
的副本,其中相同的最大pref数不止一个..修复它比这段代码复杂得多..