如何在 SQL 服务器中连接多个表?

How do I join multiple tables in SQL Server?

我是 SQL 联接的新手,发现很难在逻辑上联接两个以上的 table。我有一个 table 叫 PastExperience

PastExperience(id,eembossline,embossname,pastexperience,insertiondate,userid,dateofstay)

我将与我的 Users table 一起使用 UserID 映射两个 tables

Users(UserName,MerchantID,Userid)

为了实现这一点,我编写了以下查询,效果很好

Select
Convert(varchar(50),PE.dateofstay,103) 'Date of Stay',PE.embossname 'EmbossName', PE.pastexperience,U.UserName from PastExperience PE
inner join Users U
on U.UserId=PE.userid
where embossline='3100041810000001'

现在我正在尝试和挣扎的是,我想在特定的 EmbossLine

上从我的商家 table select MerchantName1
Merchant(MerchantID,MerchantName1)

EmbossLineMerchantID 可以映射自 card table

Card(MerchantID,EmbossLine,EmbossName)

如何加入这些多个 table? 我试过类似的东西,但我的语法是错误的

Select
    Convert(varchar(50),PE.dateofstay,103) 'Date of Stay',
    C.embossname 'EmbossName',
    PE.pastexperience,
    U.UserName ,
    M.merchantname1 
    from PastExperience PE 
    inner join Users U on U.UserId=PE.userid
    inner join Card C on C.MerchantID = Merchant.MerchantID
    where PE.embossline='3100041810000001'

试试这个:

Select Convert(char(10),PE.dateofstay,103) 'Date of Stay',
       PE.embossname 'EmbossName', 
       PE.pastexperience,
       U.UserName,
       M.MerchantName1
from PastExperience PE
inner join Users U on U.UserId=PE.userid
inner join Cards C on (PE.EmbossLine = C.EmbossLine)
inner join Merchant M on(U.MerchantId = M.MerchantId AND C.MerchantID = Merchant.MerchantID)
where embossline='3100041810000001'

注意#1:代码直接写在这里,可能会有一些错误。
注意#2:我已经将转换的目标数据类型从 varchar(50) 更改为 char(10),字符串转换函数将始终 return 固定长度细绳。

使用此代码:

 Select
    Convert(varchar(50),PE.dateofstay,103) 'Date of Stay',
    PE.embossname 'EmbossName',
    PE.pastexperience,
    U.UserName ,
    M.merchantname1 
    from PastExperience PE
    inner join Users U on U.UserId=PE.userid
    inner join merchant m on m.merchantid=u.merchantid
    inner join card C on m.merchantid=C.merchantid and PE.EmbossLine = C.EmbossLine
    where embossline='3100041810000001'

我想出了如何获得想要的结果。这是我的查询

Select
    Convert(varchar(50),PE.dateofstay,103) 'Date of Stay',
    C.embossname 'EmbossName',
    PE.pastexperience,
    U.UserName ,
    M.merchantname1 
    from card C 
    inner join PastExperience PE on c.EmbossLine=PE.embossline 
    inner join Users U on U.UserId=PE.userid
    inner join Merchant M on M.MerchantID=C.MerchantID
    where PE.embossline='0093000110000001'