此问题类似于我之前的问题,除了这是INSERT而不是更新 我有两张桌子:联系人和公司。
contacts has : id, group_id, company_id, email, company
companies has: id, group_id, name, email
所以使用此查询
UPDATE contacts c
INNER JOIN companies co ON c.company_id = co.id
SET c.group_id = co.group_id,
c.company = companies.name
我可以将更新数据从公司移动到contact.company_id = company.id。
的联系人但是,对于所有没有联系的公司,我怎样才能进行INSERT?或者为了简化,我如何将所有公司表数据移动到联系人表数据中。 e.g:
Companies
id group_id name email
1 1 abc a@a.com
2 1 def d@d.com
3 1 ghi g@g.com
Contacts
id group_id company_id email company phone
1 1 1 a@a.com abc
2 1 2 d@d.com def
3 1 3 g@g.com ghi
所以我希望这样的条目,并且对于没有值的那个将默认为NULL或None
答案 0 :(得分:2)
我认为你想要:
INSERT INTO Contacts (id,group_id,company_id,email,name)
SELECT co.id,co.group_id,co.id,co.email,co.name
FROM company co
LEFT JOIN contacts c ON co.id = c.company_id
WHERE c.company_id IS NULL
这将插入公司中尚未存在的联系人的所有信息。列电话将保留为空,因为该列的联系人中没有信息。
答案 1 :(得分:0)
我相信你需要在select语句中的2个表之间进行外连接,然后在目标表中查找一个空字段,并且只选择那些行。
insert into t1 (f1,f2,f3) select s1,s2,s3 from sourcetable as st
left outer join t1 on
t1.f1=st.s1,
t1.f2=st.s2,
t1.f3=st.s3
where t1.id is null;
这样你只能从st获取t1中没有id的行。