2014-01-24 28 views
0

Oracle-让行可以说我有两个查询::从查询中不存在的另一个查询

查询1:

SELECT id, name, permission FROM table1 

结果1:

+----+------+------------+ 
| id | name | permission | 
+----+------+------------+ 
| 1 | A | z   | 
| 1 | A | x   | 
| 2 | B | t   | 
| 3 | C | r   | 
+----+------+------------+ 

查询2:

SELECT id, name, permission FROM table2 

结果2:

+----+------+------------+ 
| id | name | permission | 
+----+------+------------+ 
| 1 | A | z   | 
| 2 | B | t   | 
+----+------+------------+ 

我想缺少的权限输出:

+----+------+------------+ 
| id | name | permission | 
+----+------+------------+ 
| 1 | A | x   | 
| 3 | C | r   | 
+----+------+------------+ 

我该怎么办呢?

回答

1
SELECT * 
FROM table1 
WHERE (id, name, permission) NOT IN (SELECT id, 
               name, 
               permission 
             FROM table2); 
+0

如果任何列可为空,NOT IN可能是不安全的。 – kyooryu

3

使用MINUS运营商ORACLE,它会给你从第一个表,该表是不是在第二所有的行,即不包括共同排:

SELECT id, 
     name, 
     permission 
FROM table1 
MINUS 
SELECT id, 
     name, 
     permission 
FROM table2; 
0

这一个是空安全:

SELECT 
    t1.id 
    , t1.name 
    , t1.permission 
FROM table1 t1 
WHERE NOT EXISTS 
(
    SELECT 1 
    FROM table2 t2 
    WHERE 
     t1.id = t2.id 
     AND t1.name = t2.name 
     AND t1.permission = t2.permission 
)