我有一个复杂的查询,可以返回10000多条记录。
我希望能够根据2个表过滤查询。我只想在表2中的任何记录也存在于表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 :(得分:0)
如果相交不为空,则来自table1的所有记录? 那样的东西?
select id from table1 where
(
select
count(*)
from
(
select id from table1
intersect
select id from table2
)
)>0
答案 1 :(得分:0)
我认为他正在寻找唯一的交叉点
select id from table1
intersect
select id from table2
答案 2 :(得分: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
试试这段代码我希望它能帮到你
答案 3 :(得分:0)
如果id
在两个表中是唯一的,您似乎想要这样:
SELECT S.*
FROM SOMETABLE S
WHERE (SELECT ID IN TABLE1 WHERE S.PID = PID) = (SELECT ID IN TABLE2 WHERE S.PID = PID)
你可以做类似的事情,即使它不是唯一的(尽管问题中的答案是唯一的)。
答案 4 :(得分:0)
SELECT *
FROM Table1 tab1
INNER JOIN Table2 tab2
ON tab1.ID = tab2.ID
SELECT *
FROM Table1
WHERE ID IN(从表2中选择ID)
答案 5 :(得分:0)
如果在三个表中的任何一个表中只有一行具有给定PID
,例如SOMETABLE
,TABLE1
和TABLE2
,您只需使用内部联接,即join
。如果PID
和TABLE1
中存在多个具有给定TABLE2
的行,则使用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);
希望这有帮助。