Eu tenho as duas tabelas a seguir, Tabela A e Tabela B.
O que estou tentando fazer é retornar um conjunto de resultados onde:
Se a posição inicial (somente) na Tabela B estiver entre a posição inicial e final de qualquer linha da Tabela A, não quero que essa linha da Tabela B esteja no conjunto de resultados.
Se qualquer uma das posições inicial e final da Tabela A estiver entre qualquer uma das posições inicial e final de qualquer linha da Tabela B, não quero essa linha da Tabela A.
Aqui está a Tabela A:
LIVRAR | StartPos | EndPos |
---|---|---|
7 | 45 | 77 |
7 | 118 | 130 |
7 | 197 | 212 |
7 | 218 | 235 |
Aqui está a Tabela B:
LIVRAR | StartPos | EndPos |
---|---|---|
7 | 83 | 87 |
7 | 121 | 132 |
7 | 175 | 179 |
7 | 183 | 191 |
7 | 195 | 214 |
7 | 221 | 237 |
Aqui está o meu conjunto de resultados desejado. Você pode ver que 197 e 212 da Tabela A estão entre a linha da Tabela B que tem 195 e 214, de modo que a linha da Tabela A não está no conjunto de resultados. Você também pode ver que a posição inicial 221 na Tabela B está entre um intervalo na Tabela A (218, 235), de modo que a linha da Tabela B também não está no conjunto de resultados.
LIVRAR | StartPos | EndPos |
---|---|---|
7 | 45 | 77 |
7 | 83 | 87 |
7 | 118 | 130 |
7 | 175 | 179 |
7 | 183 | 191 |
7 | 195 | 214 |
7 | 218 | 235 |
Em suma, quero excluir onde:
- As posições inicial e final da Tabela A estão entre qualquer uma das posições inicial e final da tabela B.
- A posição inicial da Tabela B está entre qualquer uma das posições inicial e final da tabela A.
Além disso, há mais de um RIDs na tabela... Eu pensei (e ainda acho) que poderia fazer isso usando uma junção FULL (ou talvez usando APPLY), mas estou ficando um pouco preso, e é por isso que eu estou pedindo a todos vocês alguma ajuda sobre isso!
Aqui está o T-SQL para gerar as duas tabelas:
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
De acordo com sua pergunta, acho que é isso que você quer:
violino