MYSQL更新一个表,其他表使用2列限定值

时间:2015-05-07 05:36:04

标签: mysql inner-join

我一直试图让这个查询起作用,并希望有人可以给我一些建议。

我有两张桌子。主人和辅助。我需要根据groupid和section id来更新master中的所有行而不是master中的行。

我需要使用多个辅助表来实际执行此操作,但只要我能够弄清楚如何在一个表上执行此操作,我就可以在我需要的每个表上手动运行查询。

到目前为止,我一直在尝试使用select来从aux中获取应插入master的数据。一旦我有了,我可以修改它来创建插入查询。 (我希望)

select 
   a.id 
from 
   master as m, 
   aux as a
where 
   a.gid = m.groupid 
and 
   a.sid = m.sectionid 
and 
   not in m.groupid 
and 
   not in m.sectionid

此查询无效:(

主表格

id    groupid    sectionid
1     A Group    21
2     A Group    23
3     B Group    55
4     C Group    999
5     D Group    52A
6     D Group    53

辅助表格

id    gid        sid
1     A Group    21
2     A Group    22
3     A Group    23
4     B Group    55
5     B Group    55A
6     C Group    999
7     D Group    52A
8     D Group    53
9     D Group    56
查询后

主表格

id    groupid    sectionid
1     A Group    21
2     A Group    23
3     B Group    55
4     C Group    999
5     D Group    52A
6     D Group    53
7     A Group    22
8     B Group    55A
9     D Group    56

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

我认为and not in m.groupid不是有效的sql。 带有子选择的not exist应该可以解决问题:

insert into master (groupid, sectionid)
select a.gid, a.sid
from aux as a
where not exists(
  select *
  from master as m
  where m.groupid = a.gid
  and a.sid = m.sectionid
)

答案 1 :(得分:0)

你可以尝试一下......

select 
    id 
from 
    aux as a
where 
    not exists (
        select 
            id 
        from 
            master 
        where 
            groupid = a.gid 
        and 
            sectionid = a.sectionid
    )

SQLFiddle