返回

MySQL:如何仅查询唯一字段,且排除重复条目?

mysql

仅在没有重复条目时查询 MySQL 中的唯一字段

问题

我们有一个名为 table_name 的 MySQL 表,它包含以下列:

  • plz:邮政编码
  • ort:城镇
  • gemeinde:市

我们希望获取 plz 的列表,其中 ort 不等于 gemeinde,但仅当该 plz 没有 ort 等于 gemeinde 的情况。

例如,考虑以下表:

plz ort gemeinde
1000 uttenthal buchkirchen
1000 buchkirchen buchkirchen
2000 mistelbach buchkirchen
2000 unterholz buchkirchen

在这种情况下,我们应该只得到 plz 2000,因为对于 plz 1000 存在一个条目,其中 ort buchkirchen 等于 gemeinde buchkirchen

解决方案

我们可以使用以下 MySQL 查询来解决这个问题:

SELECT DISTINCT plz
FROM table_name
WHERE ort <> gemeinde
GROUP BY plz
HAVING COUNT(*) = 1;

解释

这个查询是如何工作的:

  1. SELECT DISTINCT plz:选择 plz 列的唯一值。
  2. FROM table_name:从 table_name 表中选择。
  3. WHERE ort <> gemeinde:仅选择 ort 不等于 gemeinde 的行。
  4. GROUP BY plz:将结果按 plz 分组。
  5. HAVING COUNT(*) = 1:仅选择那些没有重复 plz 的组。

这个查询将返回一个 plz 列表,其中 ort 不等于 gemeinde,并且没有重复的 plz 值。

结论

通过使用这个查询,我们可以确保仅获取 plz 的唯一值,而这些值满足 ort 不等于 gemeinde 的条件,并且没有重复条目。这对于查找不一致数据或清理重复条目非常有用。

常见问题解答

1. 我可以将此查询用于其他数据库吗?

虽然这个查询是专门为 MySQL 设计的,但类似的查询也可以用于其他数据库,例如 PostgreSQL、Oracle 和 SQL Server。但是,语法可能会略有不同。

2. 如果 ort 列为空怎么办?

如果 ort 列为空,此查询将返回 plz 的所有唯一值,而不考虑 ort 值。

3. 我可以修改此查询以获取其他列吗?

是的,你可以修改此查询以获取其他列。只需将 SELECT DISTINCT plz 替换为您要选择的列。

4. 我可以在查询中使用通配符吗?

是的,你可以在 WHERE 子句中使用通配符,例如:

WHERE ort LIKE '%buchkirchen'

这将返回所有 ort 值包含字符串 buchkirchen 的行。

5. 如何提高此查询的性能?

为了提高此查询的性能,你可以使用索引。在 plz 列上创建一个索引将有助于提高查询速度。