Re: Простой вопрос про MySQL

sgabi

Допустим, есть 2 таблицы. В одной- названия магазинов и города, в которых они находятся, а в другой- названия магазинов и продукты, в них продающиеся. Все названия магазинов разные. Допустим, я собираюсь из первой таблицы все магазины, находящиеся в Нью-Йорке. Но перед этим мне надо удалить эти же магазины из второй таблицы. Правильно ли я сделал запрос?
Table1 Table2
названия магазинов города названия магазинов продукты
DELETE FROM Table2
WHERE название магазинов IN
(SELECT название магазинов
FROM Table1
WHERE города=NewYork)
Сейчас проверить нет возможности, может,какой- нибудь мегаотец скажет сходу?

vlfdimir58

Допустим, я собираюсь из первой таблицы все магазины, находящиеся в Нью-Йорке.
Собираешься что сделать? Выбрать?
В любом случае решение неверно.
Необходимо два запроса

sinet

Если MySQL >=4.1 и названия магазинов уникальны, то должно всё работать.
Но в любом случае лучше вместо названий магазинов использовать primary key.

sgabi

Собираешься что сделать? Выбрать?
В любом случае решение неверно.
Необходимо два запроса

Немного неточно выраизлся. Мне надо удалить из второй таблицы вышеназванное, вот и все.

kruzer25

DELETE FROM Table2
WHERE название магазинов IN
(SELECT название магазинов
FROM Table1
WHERE города=NewYork)
Мне надо удалить из второй таблицы вышеназванное, вот и все.
Это делается гораздо красивше (хотя в древних версиях может и не работать)
DELETE Table2 FROM Table1,Table2 WHERE Table1.названиемагазинов=Table2.названиемагазинов AND Table1.города=NewYork.
А то, что ты в начале написал - по идее, умный сервер такое оптимизирует, но для глупого время исполнения сразу возрастёт в количество записей в какой-то таблице (в какой, точно не скажу). Это, конечно, если у тебя в первой таблице название магазина - первичный ключ, название города - индекс, а во второй название магазина - индекс.

Corrector

Если ты захочешь удалить некоторые магазины из первой таблицы, логично, что во второй таблице захочется удалить связанные товары, иначе нарушится ссылочная целостность БД. В связи с этим погугли тему "каскадное удаление".
Оставить комментарий
Имя или ник:
Комментарий: