【问题标题】:How to join two table based on condition?如何根据条件连接两个表?
【发布时间】:2015-02-25 10:09:49
【问题描述】:
一共有三个表A,B,C
一个表的列是名称、ID、地址
B表列是ID,Address,School
C表的列是School,address,cafe
如果名称='A'
然后表 A 和表 B 将根据 A.ID =B.ID 进行连接
如果名称='B'
那么表 A 和表 B 将根据 A.ID =B.ID 和 A.Address=B.Address 加入
这个结果与表 C 连接
【问题讨论】:
标签:
sql-server
sql-server-2008
【解决方案1】:
使用OR 和AND 运算符模拟ON 子句中的if 条件。试试这个Join
SELECT *
FROM A
INNER JOIN B
ON ( A.name = 'A'
AND A.ID = B.ID )
OR ( A.Name = 'B'
AND A.ID = B.ID
AND A.Address = B.Address )
INNER JOIN C
ON B.school = C.school
【解决方案2】:
你可以试试下面的代码:
SELECT *
FROM A
INNER JOIN B
ON ( (B.Name = 'A' AND A.ID = B.ID)
OR (B.Name = 'B' AND A.ID = B.ID AND A.Address=B.Address)
)
您现在可以将结果与表 C 连接起来
谢谢
【解决方案3】:
假设 A.Name 是 A 或 B:
SELECT *
FROM A
JOIN B ON ( A.ID = B.ID )
AND ( A.Name = 'A' OR A.Address = B.Address )
JOIN C ON B.school = C.school
【解决方案4】:
SELECT * FROM A INNER JOIN B
ON A.ID = B.ID
INNER JOIN C
ON B.SCHOOL = C.SCHOOL
WHERE A.NAME = 'A'
UNION ALL
SELECT * FROM A INNER JOIN B
ON A.ID =B.ID and A.Address=B.Address
INNER JOIN C
ON B.SCHOOL = C.SCHOOL
WHERE A.NAME = 'B'
这可能有效