如何编写基于2个表动态构建字符串的查询

时间:2015-06-25 15:19:30

标签: sql left-join inner-join

我有2个表:MainTableControlTable

我想编写一个构建表示文件路径的字符串的查询。 文件路径将根据两个表之间的查询结果动态构建。

主表格包含以下列: ControlNumber CustomerID CustomerStatement

Control表只有一列:ControlNumber

我需要编写一个查询来检查Main表是否在控制表中定义了ControlNumber。 如果匹配,我会将\FolderA追加到FilePath 如果不匹配,我会附加\FolderB

结局结果将是这样的:

C:\Customers\FolderAC:\Customers\FolderB

我怀疑我需要使用left join

我该怎么做?

2 个答案:

答案 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)