在mysql中使用union删除?

时间:2018-02-15 05:03:46

标签: mysql union sql-delete

我想删除id = 142。

这两个表是:

1)user_master_activate 2)user_master表

使用union,其中两个表都有相同的列。

DELETE FROM (SELECT * FROM user_master_activate UNION SELECT * FROM user_master ) AS U WHERE (U.id = '142')
  

这是我正在让所有用户录制的地方

  SELECT * FROM (SELECT * FROM user_master_activate UNION SELECT * FROM user_master ) AS U WHERE U.id = '142'

4 个答案:

答案 0 :(得分:1)

您可以使用以下查询从user_master_activate删除数据:

DELETE FROM user_master_activate WHERE id IN
(SELECT id FROM user_master_activate WHERE id = '142'
 UNION 
 SELECT id FROM user_master WHERE id = '142')

您可以使用以下查询从user_master删除数据:

 DELETE FROM user_master WHERE id IN
(SELECT id FROM user_master_activate WHERE id = '142'
 UNION 
 SELECT id FROM user_master WHERE id = '142')

<强> Soultion2: 未经测试

DELETE
FROM user_master
    ,user_master_activate USING user_master
INNER JOIN user_master_activate ON user_master.id = user_master_activate.id
WHERE user_master.id = '142';

答案 1 :(得分:1)

只需对delete语句进行一次查询即可实现。使用select语句它可以工作,因为它只是读取查询的结果。对于删除,它将无法工作,因为您需要指定要删除的表的名称。您使用delete语句的方式不是正确的synthax。

有关详细信息,请参阅MySQL官方文档中的Delete Synthax

我建议您将删除作为两个命令运行:

 DELETE FROM user_master_activate WHERE id='142';
 DELETE FROM user_master WHERE id='142';

如果表是相关的,那么首先删除子项,然后删除父数据,否则删除顺序无关紧要。

答案 2 :(得分:1)

UNION仅用于SELECT语句:

http://dev.mysql.com/doc/refman/5.7/en/union.html

如果您不想使用两个单独的DELETE语句并且这两个表是相关的,请尝试使用JOIN语句:

https://dev.mysql.com/doc/refman/5.7/en/join.html

答案 3 :(得分:1)

您必须创建两个单独的查询,因为您要删除多个表,

DELETE FROM user_master_activate WHERE id = '142'
DELETE FROM user_master WHERE id = '142'

但是,MySQL支持cascade delete,但您必须在引用表中配置外键。

CREATE TABLE user_master
(
    id INT NOT NULL,
    -- ... other columns here 
    PRIMARY KEY (id)
);

CREATE TABLE user_master_activate
(
    id INT NOT NULL,
    -- ... other columns here 
    FOREIGN KEY (id)
        REFERENCES user_master(id)
        ON DELETE CASCADE
);

你只有一个删除声明:

DELETE FROM user_master WHERE id = '142'

user_master中引用user_master_activate的所有行也将被删除。