2016-08-08 39 views
0

我试图从尚未在另一个表中的表中获取所有记录。我会知道他们是否在其他表中存在基于该Age从一个表中选择不在另一个表中的行与h2

+------------+------------+------------+ 
| 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作为区分标记。

回答

1

这个看起来在所有三列 - 编号,姓名和年龄 - 作为一个字符串,并使用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) 
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
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 
相关问题