我试图从另一个表中已经存在的表中获取所有记录。我会根据Age
列
人
+------------+------------+------------+
| ID | Name | Age |
+============+============+============+
| 1 | John | 21 |
+------------+------------+------------+
| 2 | Jane | 24 |
+------------+------------+------------+
Person_Backup
+------------+------------+------------+
| ID | Name | Age |
+============+============+============+
| 1 | John | 22 |
+------------+------------+------------+
| 2 | Jane | 24 |
+------------+------------+------------+
在此示例中,查询应仅响应Person_Backup
。1 John 22
SELECT
"Person_Backup"."Name",
"Person_Backup"."Age"
FROM "Person_Backup"
INNER JOIN "Person" ON "Person"."Name" = "Person_Backup."Name"
WHERE ("Person"."Age" != "Person_Backup"."Age")
目前,这将从 Person_Backup 返回记录,并从人返回所有记录。我只想要来自 Person_Backup 的记录。此外,我尝试使用GROUP BY
,但它导致其他超出范围的问题,因此我不想采取这种方式。
我怀疑这是一个更简单的方法,也许是一个完全不同的查询。我想要的是选择 Person_Backup 中所有不在人中使用Age
作为区分因素的列。
答案 0 :(得分:1)
您可以使用NOT EXISTS
子句:
select *
from person_backup b
where not exists (select null
from person p
where p.name = b.name
and p.age = b.age)
答案 1 :(得分:1)
SELECT
"Person_Backup"."Name",
"Person_Backup"."Age"
FROM "Person_Backup"
LEFT JOIN "Person" ON "Person"."Name" = "Person_Backup"."Name"
AND "Person"."Age" = "Person_Backup"."Age"
WHERE "Person"."ID" IS NULL
答案 2 :(得分:1)
这一行将所有三列(ID,Name和Age)视为一个字符串,并使用CONCAT比较表之间的字符串:
SELECT *
FROM Person_Backup
WHERE CONCAT(Person_Backup.ID, Person_Backup.Name, Person_Backup.Age)
NOT IN
(SELECT CONCAT(Person.ID, Person.Name, Person.Age) FROM Person)