MySQL从另一个表插入数据

时间:2013-12-04 23:53:22

标签: php mysql sql database sql-insert

此问题类似于我之前的问题,除了这是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

2 个答案:

答案 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的行。