postgreSQL 查询以查找 2 列之间没有 1 对 1 关系的行



给定两列(Animal和Name(,如何编写SQL语句来查找没有1比1关系的行,即Dog=Patch和Dog=Rover?

动物名称
Dog 补丁
Cat Sylvester
鼠标 Gerry
鼠标 Gerry
Rover

这样的东西会起作用(可能不是最好的方法(:

SELECT DISTINCT Animal, Name
FROM (
SELECT Animal, Name, COUNT(DISTINCT Name) OVER (PARTITION BY Animal) NamesPerAnimal
FROM Table
UNION
SELECT Animal, Name, COUNT(DISTINCT Animal) OVER (PARTITION BY Name) AnimalsPerName
FROM Table
)
WHERE NamesPerAnimal > 1 OR AnimalsPerName > 1

这会在表中的任何位置为每个Name查找不同的Animal值的数量,反之亦然,并且只返回其中一个大于1的行。

您可以将EXISTS运算符与相关子查询一起使用,如下所示:

SELECT Animal, Name
FROM table_name T
WHERE EXISTS(SELECT 1 FROM table_name D WHERE D.Animal=T.Animal AND D.Name<>T.Name)
ORDER BY Animal

查看演示。

最新更新