在第三个表上加入两个表

时间:2016-11-17 22:07:15

标签: sql sql-server

我可以在一个值上连接两个表,但是,如何使用包含两个值的第三个表连接两个具有不同值的表?如:

Table A
  CustomerID
  info
  info

Table B
  CustomerName
  info
  info

Table C
  CustomerID
  CustomerName
  info
  info

这是我的尝试但它失败了......

select * from [dbo].[table A] a,
    [dbo].[Table B] b
left join [dbo].[Table C] c on c.CustomerID = a.CustomerID
left join [dbo].[Table C] d on d.CustomerName = b.CustomerName

正确方向上的一点非常有用。

3 个答案:

答案 0 :(得分:1)

您的查询可能失败的原因"是因为implicit cross joinTableA之间有一个TableB,然后是2个左连接。你可能也希望这些表之间有INNER JOINLEFT JOIN

所以:

FROM
  TableA, TableB

这与写作相同

FROM
  TableA
  CROSS JOIN TableB

你可能想要更像

这三个表
FROM
  TableA a
  LEFT JOIN TableB b
  ON a.? = b.?
  LEFT JOIN TableC c
  ON a.CustomerID = c.CustomerID
  AND b.CustomerName = c.CustomerName

OR

FROM
  TableA a
  LEFT JOIN TableC c
  ON a.CustomerID = c.CustomerID
  LEFT JOIN TableB b
  ON b.CustomerName = c.CustomerName

答案 1 :(得分:0)

SELECT * 
FROM [dbo].[table A] a
LEFT JOIN [dbo].[Table C] b
 on A.CustomerID = C.Customer_ID
LEFT join [dbo].[Table B] c 
 on c.CustomerName = B.CustomerName

这将包括A中的所有记录,B中匹配的记录以及B到C匹配的记录。

所以表和左连接的顺序很重要..你想要所有记录只存在于所有3个表中吗? A中存在的所有记录以及B和C中匹配的记录? B中存在的所有记录以及只有那些在C和A中匹配的记录?

答案 2 :(得分:0)

请尝试:

    <Legend>
        <Appearance Orientation="Horizontal" Width="220">
        </Appearance>
    </Legend>