2016-06-12 19 views
-1

我有一個複雜的查詢,可以返回10000條以上的記錄。如果兩個表有重疊列,則會得到重疊記錄

我希望能夠過濾基於2個表的查詢。我只想在表1中的任何記錄也存在於表2中時選擇記錄。

例如,如果我的表1和2是這樣的話。

表1.

ID 
1 
2 
3 
5 
6 
7 

表2.

ID 
100 
200 
1 
300 
600 

我要選擇的記錄。但是,如果表1和表2是這樣的話。我不想選擇記錄。因爲表1和表2沒有重疊。

表1.

ID 
1 
2 
3 
5 
6 
7 

表2.

ID 
100 
200 
500 
300 
600 

我的select語句會是這個樣子:

SELECT * FROM SOMETABLE AS S 
WHERE OVERLAP (SELECT ID IN TABLE1 WHERE S.PID = PID) 
       (SELECT ID IN TABLE2 WHERE S.PID = PID) 
+0

所以,只是爲了澄清,你想在這裏返回的唯一記錄是1,對不對? – Mureinik

+0

你在問什麼?如何查找表1中存在於Table2中的Id列表?或者只是如何知道是否存在?或者是其他東西? –

+0

@Mureinik我想從我的查詢中返回一條記錄,它從不是表1或2的不同表中選擇一些。 –

回答

0

從表1中的所有記錄,如果相交不爲空? 這樣的事情?

select id from table1 where 
(
    select 
     count(*) 
    from 
     (
     select id from table1 
     intersect 
     select id from table2 
    ) 
)>0 
0

我認爲他正在尋找唯一交集

select id from table1 
intersect 
select id from table2 
0
;WITH overlap AS 
(
SELECT 
a.id as id_overlap 
FROM table1 a 
inner join table2 b on a.ID = b.ID 
) 
SELECT 
    * 
FROM SOMETABLE S,overlap op 
where S.id = op.id_overlap 

試試這個代碼,我希望它會幫助你

0

如果id是兩個表中唯一的,你似乎想要這個:

SELECT S.* 
FROM SOMETABLE S 
WHERE (SELECT ID IN TABLE1 WHERE S.PID = PID) = (SELECT ID IN TABLE2 WHERE S.PID = PID) 

即使它不是唯一的,你也可以做類似的事情(儘管問題的答案是獨一無二的)。

0

SELECT *

FROM表1 TAB1

INNER JOIN表2 TAB2

ON tab1.ID = tab2.ID


SELECT *

FROM表1

其中ID號(從表2中選擇ID)

0

如果在三個表中的任何一箇中只有一行具有給定的PID,例如, SOMETABLETABLE1TABLE2,那麼你可以簡單地使用內部連接,即join。如果在TABLE1TABLE2中可以有多行且給定爲PID,則使用exists可能是有益的。

例如,這裏是連接:

select * 
from SOMETABLE a 
join TABLE1 b 
    on a.PID = b.PID 
join TABLE2 c 
    on a.PID = c.PID; 

下面是使用存在。這將只返回SOMETABLE中具有相同PID的不同行和exists子查詢中的結果集。

select * 
from SOMETABLE a 
where exists (
    select * 
    from TABLE1 b 
    join TABLE2 c 
     on b.PID = c.PID 
    where a.PID = b.PID); 

希望這會有所幫助。