我有一张桌子,如下:
ColA ColB ColC
````` `````` ``````
1 Steve Rodgers
2 Tony Stark
3 Steve Jobs
结果表应如下所示:
ColA ColB ColC
````` `````` ``````
2 Tony Stark
ColB
中具有相同值的行应被删除。如何删除/排除此类行?
答案 0 :(得分:2)
您可以使用类似的逻辑:
SELECT *
FROM TABLE
WHERE COLB NOT IN (SELECT COLB
FROM TABLE
GROUP BY COLB
HAVING COUNT(*) > 1)
答案 1 :(得分:1)
不存在:
select * from tablename t
where not exists (
select 1 from tablename
where colb = t.colb and cola <> t.cola
)
答案 2 :(得分:0)
我只想指出您可以通过聚合来做到这一点:
select min(cola) as col1, colb, min(colc) as colc
from t
group by colb
having count(*) = 1;
如果计数为1
,则min()
将带回该行中的值。
答案 3 :(得分:0)
如果您有一个覆盖索引且其前导列为ColB
,则也可以使用LAG
/ LEAD
。这样可以按顺序扫描索引(无需排序),并保留其中ColB
与它的任何一个邻居都不相同的行
WITH T
AS (SELECT *,
LAG(ColB) OVER (ORDER BY ColB) AS PrevColB,
LEAD(ColB) OVER (ORDER BY ColB) AS NextColB
FROM YourTable)
SELECT *
FROM T
WHERE IIF(ColB IN ( PrevColB, NextColB ), 0, 1) = 1
答案 4 :(得分:0)
您也可以使用
CREATE TABLE T(
Col1 INT,
Col2 VARCHAR(45),
Col3 VARCHAR(45)
);
INSERT INTO T VALUES
(1, 'Steve', 'Rodgers'),
(2, 'Tony', 'Stark' ),
(3, 'Steve', 'Jobs');
SELECT *
FROM T
WHERE 1 = (SELECT COUNT(Col2)
FROM T TT
WHERE T.Col2 = TT.Col2
);
返回:
+------+------+-------+
| Col1 | Col2 | Col3 |
+------+------+-------+
| 2 | Tony | Stark |
+------+------+-------+