提前感谢您提供的任何帮助。我想我可能会问一个微不足道的问题,但我无法确定我将如何做到这一点,也无法确定究竟要搜索什么。如果浪费你的时间,我很抱歉。
所以我有两个表 TableA 和 TableB ,我需要以特定方式加入这两组数据,我将在下面参考一些示例表进行说明
表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 和 TableA.Contact_2 = TableB.Name 和 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
这只是解释我的问题的一个简单例子。很抱歉这么长的解释,但我宁愿有一个详细的例子来限制混淆。
谢谢!
答案 0 :(得分: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));
这样,您可以在不必更改数据库架构的情况下为仲裁数量的联系人建模。