За последние 24 часа нас посетили 16972 программиста и 2211 роботов. Сейчас ищут 986 программистов ...

удаление из 2х таблиц

Тема в разделе "MySQL", создана пользователем gkhelloworld, 12 июн 2010.

  1. gkhelloworld

    gkhelloworld Активный пользователь

    С нами с:
    18 ноя 2007
    Сообщения:
    311
    Симпатии:
    0
    Адрес:
    PHP.ru
    [sql]DELETE FROM `a`,
    `b`
    USING
    `a`,
    `b`

    WHERE
    `a`.`condition` = '0' AND
    `a`.`uid` = '1' AND
    `a`.`eid` = '2';[/sql]

    Очевидное удаление из 2х таблиц... пример работает таким образом, что удаляет только если в таблице b есть значения как в таблице a, но у меня иногда бывает, что нужно удалить только из таблицы a, так как в b ничего не добавлено.
    можно ли как-то переделать данный запрос?
     
  2. Einbaukueche

    Einbaukueche Активный пользователь

    С нами с:
    14 апр 2010
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Там, где много гор и пива.
    Неправда, ибо b у вас в условии запроса отсутствует совсем, и структуры таблиц вы не привели. ;)

    Всё можно, если осторожно (с).

    Если правильно вас понял, то вам нужно такое?

    Исходная ситуация:

    Код (Text):
    1.  
    2. mysql> create table a (id int, payload varchar(10));
    3. Query OK, 0 rows affected (0.04 sec)
    4.  
    5. mysql> create table b (id int, payload varchar(10));
    6. Query OK, 0 rows affected (0.00 sec)
    7.  
    8. mysql> select * from a;
    9. Empty set (0.00 sec)
    10.  
    11. mysql> insert into a values(1,'bar'),(2, 'foo'),(3, 'baz');
    12. Query OK, 3 rows affected (0.00 sec)
    13. Records: 3  Duplicates: 0  Warnings: 0
    14.  
    15. mysql> insert into b values(1,'bar'),(2, 'foo');
    16. Query OK, 2 rows affected (0.00 sec)
    17. Records: 2  Duplicates: 0  Warnings: 0
    18.  
    19. mysql> select * from a;
    20. +------+---------+
    21. | id   | payload |
    22. +------+---------+
    23. |    1 | bar     |
    24. |    2 | foo     |
    25. |    3 | baz     |
    26. +------+---------+
    27. 3 rows in set (0.00 sec)
    28.  
    29. mysql> select * from b;
    30. +------+---------+
    31. | id   | payload |
    32. +------+---------+
    33. |    1 | bar     |
    34. |    2 | foo     |
    35. +------+---------+
    36. 2 rows in set (0.01 sec)
    Стираем только то, что есть в обоих таблицах:

    Код (Text):
    1.  
    2. mysql> delete a, b
    3.     -> from a
    4.     -> left join b using(id)
    5.     -> where a.id IN (1,2);
    6. Query OK, 4 rows affected (0.00 sec)
    7.  
    8. mysql> select * from a;
    9. +------+---------+
    10. | id   | payload |
    11. +------+---------+
    12. |    3 | baz     |
    13. +------+---------+
    14. 1 row in set (0.00 sec)
    15.  
    16. mysql> select * from b;
    17. Empty set (0.00 sec)
    Тем же самым запросом стираем оставшиеся данные в a, которых в b нет.
    Код (Text):
    1.  
    2. mysql> delete a, b
    3.     -> from a
    4.     -> left join b using(id)
    5.     -> where a.id IN (3);
    6. Query OK, 1 row affected (0.00 sec)
    7.  
    8. mysql> select * from a;
    9. Empty set (0.00 sec)
    10.  
    11. mysql> select * from b;
    12. Empty set (0.00 sec)

    Как вы видите, запрос в обоих случаях один и тот же, только id подставляем, а там всё равно, есть они в b или нет.
     
  3. gkhelloworld

    gkhelloworld Активный пользователь

    С нами с:
    18 ноя 2007
    Сообщения:
    311
    Симпатии:
    0
    Адрес:
    PHP.ru
    очень профессионально, то что нужно.. !