sqlite如何过滤不一致的记录
How to filter inconsistent records in sqlite
假设我的 SQLite table 具有以下记录:
recID
productID
productName
1
1
Product A
2
2
Product B
3
2
Product C
4
3
Product D
5
3
Product D
recID = 主键,自增。
如果我运行:
SELECT productID, productName
FROM table
GROUP BY productID, productName
结果是:
productID
productName
1
Product A
2
Product B
2
Product C
3
Product D
如您所见,productID 2 的 productName 不一致:Product B and Product C
。我如何 运行 查询只是为了检测不一致的?例如,我希望结果为:
productID
productName
2
Product B
2
Product C
使用 EXISTS
得到超过 1 productName
的 productID
:
SELECT t1.productID, t1.productName
FROM tablename t1
WHERE EXISTS (
SELECT *
FROM tablename t2
WHERE t2.productID = t1.productID AND t2.productName <> t1.productName
);
或者,对于小型数据集,在子查询中使用聚合计算每个 productID
的 productName
的不同数量,使用运算符 IN
:
SELECT productID, productName
FROM tablename
WHERE productID IN (
SELECT productID
FROM tablename
GROUP BY productID
HAVING COUNT(DISTINCT productName) > 1
);
假设我的 SQLite table 具有以下记录:
recID | productID | productName |
---|---|---|
1 | 1 | Product A |
2 | 2 | Product B |
3 | 2 | Product C |
4 | 3 | Product D |
5 | 3 | Product D |
recID = 主键,自增。
如果我运行:
SELECT productID, productName
FROM table
GROUP BY productID, productName
结果是:
productID | productName |
---|---|
1 | Product A |
2 | Product B |
2 | Product C |
3 | Product D |
如您所见,productID 2 的 productName 不一致:Product B and Product C
。我如何 运行 查询只是为了检测不一致的?例如,我希望结果为:
productID | productName |
---|---|
2 | Product B |
2 | Product C |
使用 EXISTS
得到超过 1 productName
的 productID
:
SELECT t1.productID, t1.productName
FROM tablename t1
WHERE EXISTS (
SELECT *
FROM tablename t2
WHERE t2.productID = t1.productID AND t2.productName <> t1.productName
);
或者,对于小型数据集,在子查询中使用聚合计算每个 productID
的 productName
的不同数量,使用运算符 IN
:
SELECT productID, productName
FROM tablename
WHERE productID IN (
SELECT productID
FROM tablename
GROUP BY productID
HAVING COUNT(DISTINCT productName) > 1
);