Удалить с Join в MySQL - PullRequest
       96

Удалить с Join в MySQL

456 голосов
/ 17 марта 2009

Вот скрипт для создания моих таблиц:

CREATE TABLE clients (
   client_i INT(11),
   PRIMARY KEY (client_id)
);
CREATE TABLE projects (
   project_id INT(11) UNSIGNED,
   client_id INT(11) UNSIGNED,
   PRIMARY KEY (project_id)
);
CREATE TABLE posts (
   post_id INT(11) UNSIGNED,
   project_id INT(11) UNSIGNED,
   PRIMARY KEY (post_id)
);

В моем PHP-коде при удалении клиента я хочу удалить все сообщения проектов:

DELETE 
FROM posts
INNER JOIN projects ON projects.project_id = posts.project_id
WHERE projects.client_id = :client_id;

Таблица сообщений не имеет внешнего ключа client_id, только project_id. Я хочу удалить сообщения в проектах, которые прошли client_id.

Сейчас это не работает, потому что ни одно сообщение не удалено.

Ответы [ 13 ]

1 голос
/ 07 октября 2013

Если объединение не работает для вас, вы можете попробовать это решение. Он предназначен для удаления потерянных записей из t1, когда не используются внешние ключи + определенное условие где. То есть он удаляет записи из таблицы1, которые имеют пустое поле «код» и не имеют записей в таблице 2, сопоставляя их по полю «имя».

delete table1 from table1 t1 
    where  t1.code = '' 
    and 0=(select count(t2.name) from table2 t2 where t2.name=t1.name);
0 голосов
/ 13 июля 2016

- обратите внимание, что вы не можете использовать псевдоним над таблицей, где вам нужно удалить

DELETE tbl_pagos_activos_usuario
FROM tbl_pagos_activos_usuario, tbl_usuarios b, tbl_facturas c
Where tbl_pagos_activos_usuario.usuario=b.cedula
and tbl_pagos_activos_usuario.cod=c.cod
and tbl_pagos_activos_usuario.rif=c.identificador
and tbl_pagos_activos_usuario.usuario=c.pay_for
and tbl_pagos_activos_usuario.nconfppto=c.nconfppto
and NOT ISNULL(tbl_pagos_activos_usuario.nconfppto)
and c.estatus=50
0 голосов
/ 04 апреля 2016

Попробуйте это,

DELETE posts.*
FROM posts
INNER JOIN projects ON projects.project_id = posts.project_id
WHERE projects.client_id = :client_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...