首頁>Database>source

我有以下两个表,表A和表B。

我要做的是返迴結果集,其中:

  1. 如果表B中的開始位置(仅)在表A中任何行的開始位置和結束位置之間,那麼我不希望表B中的该行出現在結果集中。

  2. >
  3. 如果表A中的任何開始和結束位置都在表B中任何行的任何開始和結束位置之間,那麼我不希望表A中的该行。

這是表A:

<身體>
RID StartPos EndPos
7 45 77
7 118 130
7 197 212
7 218 235

這是表B:

<身體>
RID StartPos EndPos
7 83 87
7 121 132
7 175 179
7 183 191
7 195 214
7 221 237

這是我想要的結果集.您可以看到表A的197和212介於表B的具有195和214的行之間,因此表A的行不在結果集中.您還可以看到表B中的開始位置221在表A中的範圍(218、235)之間,因此表B中的行也不在結果集中。

<身體>
RID StartPos EndPos
7 45 77
7 83 87
7 118 130
7 175 179
7 183 191
7 195 214
7 218 235

总而言之,我想排除以下位置:

  • TableA start pos and end pos are between any of table B's start pos and end pos.
  • TableB start pos is between any of table A's start pos and end pos.

表中還有多个RID ... 我以為(並且仍然认為)可以使用FULL join(或使用APPLy)来完成此操作,但是我有點卡住了,這就是為什麼我要求大家在此方面尋求帮助!

以下是用於生成两个表的T-SQL:

CREATE TABLE #TableA(
    RID int NULL,
    StartPos int NULL,
    EndPos int NULL
)
INSERT #TableA (RID, StartPos, EndPos) VALUES (7, 45, 77)
INSERT #TableA (RID, StartPos, EndPos) VALUES (7, 118, 130)
INSERT #TableA (RID, StartPos, EndPos) VALUES (7, 197, 212)
INSERT #TableA (RID, StartPos, EndPos) VALUES (7, 218, 235)

CREATE TABLE #TableB(
    RID int NULL,
    StartPos int NULL,
    EndPos int NULL
)
INSERT #TableB (RID, StartPos, EndPos) VALUES (7, 83, 87)
INSERT #TableB (RID, StartPos, EndPos) VALUES (7, 121, 132)
INSERT #TableB (RID, StartPos, EndPos) VALUES (7, 175, 179)
INSERT #TableB (RID, StartPos, EndPos) VALUES (7, 183, 191)
INSERT #TableB (RID, StartPos, EndPos) VALUES (7, 195, 214)
INSERT #TableB (RID, StartPos, EndPos) VALUES (7, 221, 237)

SELECT *
FROM #TableA
SELECT *
FROM #TableB
最新回復
  • 6月前
    1 #

    根据您的問题,我认為這是您想要的:

    select * from #TableB b 
    where not exists (
        select 1 from #TableA a 
        where b.StartPos between a.StartPos and a.EndPos
        and A.RID = b.RID
    )
    union
    select * from #TableA a 
    where not exists (
        select 1 from  #TableB b
        where a.StartPos between b.StartPos and b.EndPos
        and a.EndPos between b.StartPos and b.EndPos
        and A.RID = b.RID
    )
    ;
    

    提琴

  • postgresql:Postgres 11:升級後查詢計划使用seq掃描
  • docker:使用db2inst1執行db2命令列時出現授權錯誤