0

提前感谢您提供的任何帮助。我想我可能会问一个微不足道的问题,但我无法确定我将如何做到这一点,也无法确定究竟要搜索什么。因此,如果您的时间被浪费了,我深表歉意。

所以我有两个表TableATableB,我需要以特定的方式连接两组数据,我将在下面参考一些示例表进行解释。

表A:

Name | Contact_1 | Contact_2 | Contact_3 
----------------------------------------
Joe  | Anne      | Sue       | Phil
Dan  | Tom       |           |          
May  | Jeff      | Pete      | Tim

等等

表B:

Name | Contact_No
-----------------
Anne | 123456789
Sue  | 234567891
Phil | 345678912
Tom  | 456789123
Jeff | 567891234
Pete | 678912345
Tim  | 789123456

在 TableA 和 TableB 之间连接时的结果表:

TableA.Contact_1 = TableB.Name AND TableA.Contact_2 = TableB.Name AND TableA.Contact_3 = TableB.Name

给出:

Name | Contact_1 | ContactNo_1 | Contact_2 | ContactNo_2 | Contact_3 | ContactNo_3
----------------------------------------
Joe  | Anne      | 123456789   | Sue       | 234567891   | Phil      | 345678912
Dan  | Tom       | 456789123   |           |             |           |
May  | Jeff      | 567891234   | Pete      | 678912345   | Tim       | 789123456

这只是解释我的问题的一个简单例子。抱歉这么长的解释,但我宁愿有一个详细的例子来限制混乱。

谢谢!

4

1 回答 1

2

您必须将 TableA 与 TableB 连接三次:

select ta.name, 
       ta.contact_1, tb1.contact_no, 
       ta.contact_2, tb2.contact_no, 
       ta.contact_3, tb3.contact_no 
from TableA ta
     left join TableB tb1 on ta.contact_1 = tb1.name
     left join TableB tb2 on ta.contact_2 = tb2.name
     left join TableB tb3 on ta.contact_3 = tb3.name;

如果 TableA.contact_1 (_2, _3) 中允许有空值,则需要左连接。

编辑

但是请注意,通常最好有一个单独的表来保持一对(名称,名称)连接的事实,例如,

create table TableA(a_name varchar primary key);
create table TableB(b_name varchar primary key, 
                     b_contact_no varchar);
create table Contacts(a_name varchar,
                      b_name varchar,
                      primary key(a_name,b_name),
                      foreign key(a_name) references TableA(a_name),
                      foreign key(b_name) references TableB(B_name));

这样,您可以对任意数量的联系人进行建模,而无需更改数据库架构。

于 2013-10-29T10:34:21.440 回答