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

How to write a query that builds a string dynamically based on a 2 tables

我有 2 个 table:MainTableControlTable

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

主要 table 有以下列: ControlNumber CustomerID CustomerStatement

控件 table 只有一列:ControlNumber

我需要编写一个查询来检查 Main table 是否在 Control Table 中定义了一个 ControlNumber。 如果匹配,我将 \FolderA 附加到我的 FilePath 如果不匹配,我附加 \FolderB

最终结果将是这样的:

C:\Customers\FolderAC:\Customers\FolderB

我怀疑我需要使用 left join

我该怎么做?

你说得对,你想要左连接。将其与 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 
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)