我有2个表:MainTable
和ControlTable
。
我想编写一个构建表示文件路径的字符串的查询。 文件路径将根据两个表之间的查询结果动态构建。
主表格包含以下列:
ControlNumber
CustomerID
CustomerStatement
Control表只有一列:ControlNumber
我需要编写一个查询来检查Main表是否在控制表中定义了ControlNumber
。
如果匹配,我会将\FolderA
追加到FilePath
如果不匹配,我会附加\FolderB
结局结果将是这样的:
C:\Customers\FolderA
或C:\Customers\FolderB
我怀疑我需要使用left join
我该怎么做?
答案 0 :(得分:2)
你想要一个左连接是对的。将其与case...when
表达式组合以确定值:
select
*,
case
when Control.ControlNumber is not null
then '\FolderA'
else '\FolderB'
end as FilePath
from main
left join control on main.ControlNumber = control.ControlNumber
目前尚不清楚路径的其余部分来自哪里;也许它是静态的,你想将它与case表达式中的值连接起来:
'c:\customers' + -- or concat() or || depending on sql dialect
case when Control.ControlNumber is not null then '\FolderA' else '\FolderB' end as FilePath
答案 1 :(得分:0)
SELECT 'C:\' || CustomerID || '\FolderA'
FROM MainTable
WHERE EXISTS
( SELECT 1 FROM ControlNumber WHERE ControlTable.ControlNumber = MainTable.CustomerID )
UNION
SELECT 'C:\' || CustomerID || '\FolderB'
FROM MainTable
WHERE NOT EXISTS
( SELECT 1 FROM ControlTable WHERE ControlTable.ControlNumber = MainTable.ControlNumber)