DB2 INNER JOIN OR Заявление - PullRequest
2 голосов
/ 07 января 2012

Я пишу запрос для одного из моих приложений, которые я поддерживаю, и я ищу, что будет стоить дешевле при попытке получить версию DB2 оператора OR в объединении. Поскольку вы не можете использовать «ИЛИ» внутри на

Select * 
FROM
  TABLE A INNER JOIN TABLE B
ON 
   A.USERNAME = B.NAME
OR
   A.USERNAME = B.USERNAME

Я пытался попробовать UNION или UNION ALL, но я боюсь, что матч может занять больше времени, чтобы вернуться.

Ответы [ 3 ]

5 голосов
/ 07 января 2012

Хотя я присоединяюсь к другим и подтверждаю, что OR можно легко использовать в условиях соединения, как и в любых других условиях (и поэтому ваш запрос в порядке), вы все равно можете обойтись без OR в этом конкретном случае.

Условия, такие как column = value1 OR column = value2, где один и тот же столбец проверяется с использованием ряда различных фиксированных значений, могут быть преобразованы в column IN (value1, value2). Последний должен работать не хуже первого и, возможно, выглядит яснее в конце.

Итак:

SELECT *
FROM
  TABLE A
INNER JOIN
  TABLE B
ON 
  A.USERNAME IN (B.NAME, B.USERNAME)
1 голос
/ 07 января 2012

Вы можете вернуться к использованию синтаксиса предложения WHERE для присоединения.Если оптимизатор DB2 умен (и я подозреваю, что это так), он должен работать так же хорошо, как JOIN:

SELECT * FROM TABLE1 A, TABLE2 B
WHERE A.USERNAME = B.NAME OR A.USERNAME=B.USERNAME
0 голосов
/ 04 ноября 2014
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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...