从一个查询中的一个或两个表中删除

时间:2017-03-23 14:46:59

标签: mysql

我有两个MySQL表:

programs         versions
---------        ------------------------
id | name        id | program_id | data
---+-----        ---+------------+-------
1  | One         1  | 1          | OneFoo
2  | Two         2  | 1          | OneBar
                 3  | 2          | TwoBaz

versions.program_id是外键。删除版本时,我还想删除关联的程序,仅当要删除的版本是具有该program_id的最后一个版本时。例如,删除版本1不应删除任何程序,但删除版本3也应删除程序2。

我这样做是有效的:

DELETE FROM versions WHERE id = ?;

DELETE p FROM programs p
WHERE p.id = ?
AND NOT EXISTS (
  SELECT 1 FROM versions v WHERE v.programId = p.id
);

只用一个查询就能有更有效的方法吗?或者使用触发器?

1 个答案:

答案 0 :(得分:4)

使用触发器:

<items>
  <item>
    <name>A</name>
  </item>
  <item>
    <!--SPECIAL-->
    <name>B</name>
  </item>
  <item>
    <name>C</name>
  </item>
</items>