我正在尝试在某个条件下连接两个表,但无法使其正常工作。我一直在搜索和阅读,但找不到我的案例的答案。
这是我想要实现的基本思想(我用小写写的就是我想用我自己的话实现的,以防万一):
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 表达式处理条件。我尝试了不同的方法,但无法满足我的需求。我在想我可能需要一种完全不同的方法,但我不明白......
有人有建议吗?提前致谢!
也许这就是你想要的:
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] 删除。
我来说两句