Присоединиться при условии в Oracle SQL операторе SELECT - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь соединить две таблицы при условии, но я не смог заставить его работать. Я искал и читал, но не смог найти ответ по своему делу.

Это базовая c идея того, чего я пытаюсь достичь (то, что я написал в нижнем регистре, это то, что я хочу в моих словах, если вам интересно):

SELECT TABLE1.STR_FULLNAME, TABLE1.STR_MAILBIZ, TABLE2.STR_IP
FROM TABLE1
INNER JOIN TABLE2

     if TABLE2.STR_MACHINEUSER contains 'TEXT\' then join like this:
          ON TABLE1.STR_LOGIN = SELECT SUBSTR(STR_MACHINEUSER, 6) AS STR_MACHINEUSER FROM TABLE2 WHERE 
          STR_MACHINEUSER LIKE 'TEXT\%'
     else join like this:
          ON TABLE1.STR_LOGIN = TABLE2.STR_MACHINEUSER

ORDER BY TABLE2.DT_INSERT DESC;

Содержимое Table1.STR_LOGIN и Table2.STR_MACHINEUSER в некоторых случаях точно такой же, а в некоторых случаях префикс необходимо удалить в Table2.STR_MACHINEUSER ('TEXT \'). Я видел, что условия должны обрабатываться с помощью выражения CASE. Я пробовал разные способы, но я не мог заставить это работать для того, что мне нужно. Я думаю, что мне может понадобиться совершенно другой подход, но я не вижу, что ...

Есть ли у кого-то предложение? Заранее спасибо!

1 Ответ

0 голосов
/ 29 апреля 2020

Может быть, это то, что вы хотите:

SELECT TABLE1.STR_FULLNAME, TABLE1.STR_MAILBIZ, TABLE2.STR_IP
FROM TABLE1
INNER JOIN TABLE2 ON 
  (not TABLE2.STR_MACHINEUSER LIKE 'TEXT\%' and TABLE1.STR_LOGIN = TABLE2.STR_MACHINEUSER)
  or 
  (TABLE2.STR_MACHINEUSER LIKE 'TEXT\%' and TABLE1.STR_LOGIN = SUBSTR(TABLE2.STR_MACHINEUSER, 6))

Конечно, вы можете сократить свое утверждение, используя некоторую конструкцию case , например:

case 
  when TABLE2.STR_MACHINEUSER LIKE 'TEXT\%' 
  then SUBSTR(TABLE2.STR_MACHINEUSER, 6) else TABLE2.STR_MACHINEUSER 
end 

и сравнить это с TABLE1.STR_LOGIN но я считаю (ИМХО) первое (logi c) соединение лучше читаемым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...