基于两列连接两个表

时间:2013-12-05 09:59:38

标签: sql

您好我的SQL有点生疏,需要一些帮助才能使声明正确。我有以下设置表A和B:

  A        B
=====    ======
  A       A  B
  B       C  B
          A  C
          B  D
          D  A

我想加入A上的单个列,B上的两列都以表C结束:

  C
=====
  A
  A
  B
  B
  B
  A

我尝试过不同的连接,但是当我使用OR运算符时,我会遇到许多行。我的设置有点高级,我希望上面的简化表足以说明我的问题。在上面的例子中,我的设置有点先进。在我的真实世界应用程序中,我有两个表,我必须找到所有多个电话号码,可以分为两列,PHONE1和PHONE3。首先,我建立一个交叉点,以便获得所有电话号码,这些电话号码不止一次。我的问题是我需要最终返回一个返回所有多重声明的语句,以及来自其他列的一些额外数据。以下是我的发言:

SELECT * FROM
(SELECT COMPANY, CONTACT, PHONE1, PHONE3, U_EMAIL, UMEDLEM, UKONKAT, UAAFMELD
FROM CONTACT1 JOIN CONTACT2 on CONTACT1.ACCOUNTNO = CONTACT2.ACCOUNTNO) as t1
INNER JOIN
(SELECT PHONE1 as PHONE FROM CONTACT1 WHERE LEN(PHONE1) > 0
INTERSECT
SELECT PHONE3 FROM CONTACT1 WHERE LEN(PHONE1) > 0) as t2 ON t1.PHONE1 = t2.PHONE

1 个答案:

答案 0 :(得分:0)

这就是你如何在B的两列上加入A的列。

SELECT * FROM A
INNER JOIN B B1 ON A.Column1 = B1.Column1 
INNER JOIN B B2 ON A.Column1 = B2.Column2 

或者您可以使用UNION来组合两个查询结果

SELECT * FROM A
INNER JOIN B  ON A.Column1 = B.Column1 
UNION
SELECT * FROM A
INNER JOIN B  ON A.Column1 = B.Column2 

您还可以考虑LEFT连接,具体取决于您希望如何处理B中的NULL值。