2011-01-06 35 views
0

我有一台X和Y简单凡在SQL

表X

a 
b 
c 
d 

数据表Y

a 1 1 
a 32 5 
b 1 1 
b 4 5 
c 5 65 

我想在输出c和d,因为他们没有在表Y值为1的记录1

我该如何得到它?

回答

3

你不给任何列名,所以我做了一些!

SELECT col1 
FROM tablex 
EXCEPT 
select col1 
FROM tabley 
WHERE col2=1 and col3=1 

如果过于简化的例子,确实需要额外的列从tablex使用NOT EXISTS

SELECT tablex.* 
FROM tablex 
WHERE NOT EXISTS (SELECT * 
        FROM tabley 
        WHERE col2 = 1 
          AND col3 = 1 
          AND tablex.col1 = tabley.col1) 
+0

使用`EXISTS`会引起扫描tablex中的每个记录。派生表应该更快。 – Matthew 2011-01-06 23:16:48

1

我想我明白:

SELECT X.column FROM X 
WHERE X.column NOT IN 
(SELECT Y.column FROM Y WHERE Y.column2=1 AND Y.column3=1) 
1
SELECT col1 
FROM TableX 
WHERE col1 
NOT IN (select col1 
FROM TableY 
WHERE col2=1 and col3=1)