Junção ou declaração interna DB2
Estou escrevendo uma consulta para uma de minhas aplicações que eu apoio, e estou procurando o que vai custar menos na tentativa de obter uma versão DB2 de uma ou declaração no join. Uma vez que você não pode usar "ou" dentro de um
Select *
FROM
TABLE A INNER JOIN TABLE B
ON
A.USERNAME = B.NAME
OR
A.USERNAME = B.USERNAME
Tenho estado a pensar em Tentar A União ou a União, mas receio que o combate possa demorar mais tempo a regressar.
3 answers
Embora eu me junte a outros para confirmar que OR
pode ser facilmente usado em condições de junção, como em qualquer outra condição (e assim a sua consulta é perfeitamente boa), você ainda poderia fazer sem OR
Neste caso particular.
Condições como column = value1 OR column = value2
, em que a mesma coluna é testada contra vários valores fixos, podem ser transformadas em column IN (value1, value2)
. Esta última não deve funcionar pior do que a primeira e, no final, parece claramente mais clara.
Então:
SELECT *
FROM
TABLE A
INNER JOIN
TABLE B
ON
A.USERNAME IN (B.NAME, B.USERNAME)
Você pode voltar a usar a sintaxe da cláusula onde para entrar. Se o Optimizador DB2 for inteligente (e suspeito que seja), deve funcionar de forma igual e juntar-se:
SELECT * FROM TABLE1 A, TABLE2 B
WHERE A.USERNAME = B.NAME OR A.USERNAME=B.USERNAME
SELECT GROUP_REDUCTION.TOUR, FROM_DATE, TO_DATE, DISCOUNT, GROUP_SIZE, REDUCTION
FROM SEASON_DISCOUNT
RIGHT JOIN GROUP_REDUCTION ON SEASON_DISCOUNT.TOUR = GROUP_REDUCTION.TOUR
ORDER BY GROUP_REDUCTION.TOUR, FROM_DATE;