在 Oracle SQL SELECT 语句中的条件下加入

塞西莉亚

我正在尝试在某个条件下连接两个表,但无法使其正常工作。我一直在搜索和阅读,但找不到我的案例的答案。

这是我想要实现的基本思想(我用小写写的就是我想用我自己的话实现的,以防万一):

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_LOGINTable2.STR_MACHINEUSER的内容在某些情况下完全相同,在某些情况下需要在Table2.STR_MACHINEUSER ('TEXT\') 中删除前缀我已经看到应该使用 CASE 表达式处理条件。我尝试了不同的方法,但无法满足我的需求。我在想我可能需要一种完全不同的方法,但我不明白......

有人有建议吗?提前致谢!

乌姆兹

也许这就是你想要的:

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但我发现(恕我直言)第一个(逻辑)加入更好的可读性进行比较。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章