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.

 2
Author: em3ricasforsale, 2012-01-07

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)
 5
Author: Andriy M, 2012-01-07 17:56:51

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
 1
Author: ron tornambe, 2012-01-07 16:23:48
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;
 0
Author: Kumawat, 2014-11-04 16:35:24