Sql синтаксическая ошибка

0

Вот мой запрос:

$query="Delete b
Where Exists 
    (
        Select 1
        From a
        Where a.poster_password = '$pass'
        And a.ad_id = '$id'
        And a.classified_id = b.classified_id
    )
Delete a
Where a.poster_password = '$pass'
And a.ad_id = '$id'";

Я получаю эту ошибку:

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с "Где существует" (выберите "1 из a a.poster_p" в строке 2

Если вам нужно больше ввода, дайте мне знать...

Что здесь не так?

Спасибо

UDPATE:

Просто Q: Нужно ли также указывать, что a = "эта таблица" и b = "другая таблица" или MySql получает это по этому коду?

Что касается нового кода, в котором будет использоваться точка FROM и точка с запятой terminator, не будет работать и дать эту ошибку:

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с "Удалить FROM a Where a.poster_password = 'xxxxxxxxxxxxxxxxxxxxx" в строке 10

UPDATE2:

$query="Delete FROM $sql_table
        Where Exists 
        (
            Select 1
            From classified
            Where classified.poster_password = '$pass'
            And classified.ad_id = '$id'
            And classified.classified_id = $sql_table.classified_id
        );
        Delete FROM classified
        Where classified.poster_password = '$pass'
        And classified.ad_id = '$id'";

И когда я echo $query: (fordon в этом случае имеет переменную $sql_table.)

Delete FROM fordon 
Where Exists 
(  
     Select 1 
     From classified 
     Where classified.poster_password = 'xxxxx' 
     And classified.ad_id = 'motorbat_166250627' 
     And classified.classified_id = fordon.classified_id 
 ); 
 Delete FROM classified 
 Where classified.poster_password = 'xxxxx' 
 And classified.ad_id = 'motorbat_166250627'

Еще раз спасибо

  • 0
    Вы пытались удалить второй запрос ( Delete a ) и выполнить только первый?
  • 0
    Я думаю, что это была версия MySQL 5.1, кстати ... Питер: Нет, я не
Теги:
database

2 ответа

1
Лучший ответ

Вы не указываете удаляемые таблицы. Попробуйте:

$query="Delete FROM b
Where Exists 
    (
        Select 1
        From a
        Where a.poster_password = '$pass'
        And a.ad_id = '$id'
        And a.classified_id = b.classified_id
    );
Delete FROM a
Where a.poster_password = '$pass'
And a.ad_id = '$id'";

Я также добавил в точку с запятой после окончания первого запроса DELETE. Если вы хотите запустить оба одновременно, для завершения первого запроса вам потребуется разделитель, прежде чем запускать вторую версию.

Re. ваш вопрос о том, как MySQL "получает" таблицы - если a и b являются псевдонимами здесь, то нет, MySQL не знает, что a и b есть. Вам нужно будет с псевдонимом таблицы или заменить a и b на фактические имена таблиц.

  • 0
    Проверьте мое обновление, пожалуйста, это не будет работать по какой-либо причине
  • 0
    Хорошо, изменил псевдонимы, но все равно получаю ту же ошибку при обновлении моего Q ... хмм
Показать ещё 2 комментария
0

Два удаления должны быть отдельными операторами (и выполняться отдельно).

  • 0
    MySQL поддерживает удаление из нескольких таблиц: dev.mysql.com/doc/refman/5.0/en/delete.html . Однако синтаксис OP кажется неправильным. Там должно быть FROM .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню