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会让我们两个都感到惊讶;-)