说,我有一个有很多联系人的客户档案。这意味着我将从客户表中分离联系表。
tbl_customer
CustomerId (PK, NOT NULL, UNIQUE, AUTO_INCREMENT)
CustomerName
Address
(etc)
tbl_contact
ContactId (PK, NOT NULL, UNIQUE, AUTO_INCREMENT)
CustomerId (FK REFERENCES tbl_customer(CustomerId), CONSTRAINT)
Contact Type
Contact Number
现在让我们说,一个名为John Leweinsky
的客户有4个联系人。
ContactType1: Fax
ContactType2: Office Phone
ContactType3: Personal Phone
ContactType4: Personal Phone
这可以在一个查询事务中完成而不知道CustomerId
吗?
如果你已经回答了这个问题,谢谢你的提前。
答案 0 :(得分:1)
试试这个
START TRANSACTION;
insert into (feilds name) values(Values);
insert into tbl_contact(CustomerId ,ContactType,ContacNumber)
values((select max(CustomerId) from tbl_customer),'type1','Fax');
COMMIT;
传递所有其他contacttype
答案 1 :(得分:0)
假设名称是唯一的,您可以这样做:
insert into tbl_contact(CustomerId, ContactType, ContactNumber)
select cust.CustomerId, c.ContactType, c.ContactNumber
from (select 'Fax' as ContactType, Faxnumber as ContactNumber union all
select 'Office', Officenumber union all
select 'PersonalPhone', PersonalPhone union all
select 'PersonalPhone', PersonalPhone
) c cross join
Customers cust
where cust.CustomerName = 'John Leweinsky';
如果名称不是唯一的,您需要一些方法来消除客户的歧义。
答案 2 :(得分:0)
不,正确添加内容到tbl_contact的唯一方法是使用CustomerId。您的客户名称不是唯一的(也不应该是这样),因此您无法将您的联系人与John Leweinsky联系起来,除非这只是一个玩具示例而您想假装John Leweinsky是独一无二的。
您可以在不知道CustomerId的情况下添加联系人(在某些数据库引擎中,可以使用PostgreSQL作为exapmle),但是胜利者不会与John Leweinsky相关联。