2012-05-12 2 views
2

У меня есть две таблицы, продукты (product_id) и секс (product_id, sex_id). Я пытаюсь УДАЛИТЬ строки из обеих таблиц, у которых есть product_id, так что существует таблица в таблице sex с этим product_id и sex = 1. До сих пор яЗачем этот запрос DELETE терпит неудачу, когда работает эквивалентный SELECT?

CREATE TEMPORARY TABLE tempTable 
     SELECT p.product_id 
     FROM products AS p 
    INNER JOIN sex AS s 
      ON p.product_id = s.product_id 
     WHERE s.sex = 1; 

DELETE FROM products AS p 
NATURAL JOIN tempTable AS t 

УДАЛИТЬ запрос выдает эту ошибку:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NATURAL JOIN tempTable AS t' at line 2 

Этот ВЫБРАТЬ запрос работает отлично:

SELECT * FROM products 
NATURAL JOIN tempTable 

Почему ВЫБЕРИТЕ работу запроса, но запрос на удаление делает не?

+0

Я не эксперт MySQL, но ваш файл 'AS p' и' AS T' псевдонимами, кажется, не имеет смысла в 'delete' запроса. Это работает, если вы удалите их? –

+0

@JoeWhite Почему они не должны иметь смысл? Вы можете использовать их в 'WHERE', если он у вас есть. Или (см. Мой ответ), чтобы указать, в какой из таблиц должно быть выполнено DELETE. – glglgl

ответ

5

Потому что DELETE имеет different syntax. Вы должны указать, из какой таблицы (таблиц) вы хотите удалить.

Так что один из

DELETE p, t FROM products AS p NATURAL JOIN tempTable AS t; 
DELETE p FROM products AS p NATURAL JOIN tempTable AS t; 
DELETE t FROM products AS p NATURAL JOIN tempTable AS t; 
Смежные вопросы