我需要找到在不同位置重复的所有行。 表格数据如下,
---------------------------------------------------------
| Assetno | SerialNo | StickerNo | location |
---------------------------------------------------------
| 1234 | QWR | 12ERT | 123 |
| 1234 | QWR | 12ERT | 567 |
| 7888 | ytu | 67UI | 456 |
| 9000 | UIO | OPIO9 | 8 |
---------------------------------------------------------
就像上表一样,我需要找到第1行和第2行之类的行。
答案 0 :(得分:3)
一种方法使用窗口函数。因此,这适用于您的示例数据:
select t.*
from (select t.*,
count(*) over (partition by Assetno, SerialNo, StickerNo) as cnt
from t
) t
where cnt >= 2;
我会更倾向于使用exists
,
select t.*
from t
where exists (select 1
from t t2
where t2.Assetno = t.Assetno and
t2.SerialNo = t.SerialNo and
t2.StickerNo = t.StickerNo and
t2.location <> t.location
);
这更明确地指定前三列相同的行具有不同的位置。在(Assetno, SerialNo, StickerNo, location)
上使用索引也可能会更快。