MySQL,删除重复项
MySQL, Remove duplicate
我需要从 table 中删除重复项,但 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
您可以使用 GROUP BY
和 GREATEST
:
获取您的数据
SELECT empID, max(GREATEST(Pref01, Pref02, Pref03, Pref04)) FROM emp GROUP BY empID
您可以使用它直接在 emp table 中使用 exists
或 in
查找行
你的问题很复杂,根据给定的信息,我必须做出假设才能回答它..
假设没有具有相同 empID
的记录具有相同的最大优先数...
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
的重复项,相同的最大偏好数超过 1.. 修复它比此代码复杂得多..
我需要从 table 中删除重复项,但 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
您可以使用 GROUP BY
和 GREATEST
:
SELECT empID, max(GREATEST(Pref01, Pref02, Pref03, Pref04)) FROM emp GROUP BY empID
您可以使用它直接在 emp table 中使用 exists
或 in
你的问题很复杂,根据给定的信息,我必须做出假设才能回答它..
假设没有具有相同 empID
的记录具有相同的最大优先数...
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
的重复项,相同的最大偏好数超过 1.. 修复它比此代码复杂得多..