Sql 当需要执行第一个表列值时,如何进行联接?
我有两个表Sql 当需要执行第一个表列值时,如何进行联接?,sql,sql-server,stored-procedures,join,left-join,Sql,Sql Server,Stored Procedures,Join,Left Join,我有两个表rawtable和tradetable rawtable rawid companyname uniqueID 1 AAA-XA 9CV 2 BBB-DEMO 10K 3 CCC-XOXO 7D tradeid securityname CUSIP 1 AAACOMP 9CV 2 BBBCOMP 10K companyname uniqueID AAA-XA
rawtable
和tradetable
rawtable
rawid companyname uniqueID
1 AAA-XA 9CV
2 BBB-DEMO 10K
3 CCC-XOXO 7D
tradeid securityname CUSIP
1 AAACOMP 9CV
2 BBBCOMP 10K
companyname uniqueID
AAA-XA 9CV
BBB-DEMO 10K
CCC-XOXO 7D
securityname CUSIP
AAACOMP 9CV
BBBCOMP 10K
贸易表
rawid companyname uniqueID
1 AAA-XA 9CV
2 BBB-DEMO 10K
3 CCC-XOXO 7D
tradeid securityname CUSIP
1 AAACOMP 9CV
2 BBBCOMP 10K
companyname uniqueID
AAA-XA 9CV
BBB-DEMO 10K
CCC-XOXO 7D
securityname CUSIP
AAACOMP 9CV
BBBCOMP 10K
现在我需要的是tradetable
中的companyname
有点混合,所以我需要将securityname
中的tradetable
作为我使用左连接的companyname
declare DataSourceId = 3;
SELECT DISTINCT
@DataSourceId,
dbo.CleanText(tradetable.securityname)
FROM tradetable
LEFT JOIN
(
SELECT DISTINCT
companyname,
uniqueID
FROM
rawtable
) rawtable ON tradetable.cusip = rawtable. uniqueID
这将从tradetable
中为我提供名称
,但在这里我将错过rawtable
中新的不匹配名称,但我也希望这些名称出现在select语句中
如果我使用
declare DataSourceId = 3;
SELECT DISTINCT
@DataSourceId,
dbo.CleanText(rawtable.securityname) --instead of tradetable
然后我将选择错误的混合名称
那么我该如何解决这个问题呢?或者从其他地方我需要执行正确的名称,如tradetable
securityname
我期望的输出:
rawtable
rawid companyname uniqueID
1 AAA-XA 9CV
2 BBB-DEMO 10K
3 CCC-XOXO 7D
tradeid securityname CUSIP
1 AAACOMP 9CV
2 BBBCOMP 10K
companyname uniqueID
AAA-XA 9CV
BBB-DEMO 10K
CCC-XOXO 7D
securityname CUSIP
AAACOMP 9CV
BBBCOMP 10K
贸易表
rawid companyname uniqueID
1 AAA-XA 9CV
2 BBB-DEMO 10K
3 CCC-XOXO 7D
tradeid securityname CUSIP
1 AAACOMP 9CV
2 BBBCOMP 10K
companyname uniqueID
AAA-XA 9CV
BBB-DEMO 10K
CCC-XOXO 7D
securityname CUSIP
AAACOMP 9CV
BBBCOMP 10K
我想要一个securityname
即companyname
格式正确,我正在检查uniqueID
如果它匹配,那么它将从tradetable
现在
当rawtable
中有一条添加记录时,比如CCC\u XOXO
是否存在,它的实际名称可能是CCC
,因此对于获取CCC
我应该从第三个表中的位置获取该CCC
,或者是否有其他方法
意味着我还需要在我的联接权限中导入第三个表?您的意思是要从
tradetable
获取值,如果它不存在,则从rawtable
获取值?像这样
输出为:
COMPANYNAME UNIQUEID
AAACOMP CV
BBBCOMP 10K
CCC-XOXO 7D
公司名称唯一
AAACOMP CV
BBBCOMP 10K
CCC-xoxo7d
你的问题我读了两遍,但我不明白。也许可以添加一些示例输出?+1,我想OP确实希望这样,但是使用dbo.CleanText()包装的
companyname
,就像原始查询一样。@NikolaMarkovinović好的,我可以包装它。很高兴你能以同样的方式理解这个问题。我写的是类似的答案。但是,我认为OP会让我们两个都感到惊讶;-)