如何编写基于 2 个表动态构建字符串的查询
How to write a query that builds a string dynamically based on a 2 tables
我有 2 个 table:MainTable
和 ControlTable
。
我想编写一个查询来构建一个表示文件路径的字符串。
文件路径将根据两个 table 之间的查询结果动态构建。
主要 table 有以下列:
ControlNumber
CustomerID
CustomerStatement
控件 table 只有一列:ControlNumber
我需要编写一个查询来检查 Main table 是否在 Control Table 中定义了一个 ControlNumber
。
如果匹配,我将 \FolderA
附加到我的 FilePath
如果不匹配,我附加 \FolderB
最终结果将是这样的:
C:\Customers\FolderA
或 C:\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)
我有 2 个 table:MainTable
和 ControlTable
。
我想编写一个查询来构建一个表示文件路径的字符串。 文件路径将根据两个 table 之间的查询结果动态构建。
主要 table 有以下列:
ControlNumber
CustomerID
CustomerStatement
控件 table 只有一列:ControlNumber
我需要编写一个查询来检查 Main table 是否在 Control Table 中定义了一个 ControlNumber
。
如果匹配,我将 \FolderA
附加到我的 FilePath
如果不匹配,我附加 \FolderB
最终结果将是这样的:
C:\Customers\FolderA
或 C:\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)