Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Программирование на PHP

  Все выпуски  

RusFAQ.ru: Программирование на PHP


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / PHP

Выпуск № 183
от 19.11.2005, 13:00

Администратор:Калашников О.А.
В рассылке:Подписчиков: 200, Экспертов: 34
В номере:Вопросов: 1, Ответов: 4


Вопрос № 29523: Просьба ко всем специалистам по SQL. Есть две таблицы t1 и t2, в которых общие поля id. Как составить запрос, который удаляет из таблицы t1 строки с теми id, которые отсутствуют в таблице t2. Классический синтаксис такой: DELETE FROM t1 WHERE id <...

Вопрос № 29.523
Просьба ко всем специалистам по SQL. Есть две таблицы t1 и t2, в которых общие поля id. Как составить запрос, который удаляет из таблицы t1 строки с теми id, которые отсутствуют в таблице t2. Классический синтаксис такой: DELETE FROM t1 WHERE id <>(SELECT id FROM t2) Так написано в учебнике, но в MYSQL v 3.23.56 не работает
Отправлен: 14.11.2005, 12:58
Вопрос задал: Шапошников Игорь (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: Андрей_26rus
Здравствуйте, Шапошников Игорь!
DELETE FROM t1 WHERE id <>(SELECT id FROM t2)
в данном случае (SELECT id FROM t2) возвращает не одно значение,
нельзя сравнить значение id(одно значение) с одной стороны и id(множество значений) с другой стороны, данный запрос бутет верным если (SELECT id FROM t2) вернет одно единственное значение, лучше проверить существует ли в t2 такая запись, что t2.id = t1.id, и если нет то удалить из t1 запись с таким id, получим запрос:

delete from t1 where not exists(select id from t2 where t2.id = t1.id)
---------
- = Tertium non datur = -
Ответ отправил: Андрей_26rus (статус: 1-ый класс)
Отправлен: 14.11.2005, 14:55

Отвечает: Lector
Здравствуйте, Шапошников Игорь!
Попытался сделать с left join - не получилось.
Другие варианты:
сначала сделай выборку по id второй таблицы, а потом подставь её в запрос
!перейди на mysql 5.* и будет тебе счастье, ведь она поддерживает вложенные запросы.
---------
Хочешь помочь старику - сделай вместо него.
Хочешь помочь новичку - сделай вместе с ним.
Хочешь помочь мастеру - отойди и не мешай,
а хочешь помочь дураку - сам дурак.
Ответ отправил: Lector (статус: 9-ый класс)
Отправлен: 14.11.2005, 14:57

Отвечает: Дмитрий Иванов
Здравствуйте, Шапошников Игорь!

Уже не помню работает ли LEFT JOIN в v.3 но:

delete from t1 left join t2 on tab1.id=t2.ID where t2.id is NULL

или как говорят в MySQL:

CREATE TEMPORARY TABLE tmptable
SELECT t1.* FROM t1
LEFT JOIN t2 ON t2.id = t1.id
WHERE t2.id is NULL;

DELETE FROM t1 USING tmptable, t1
WHERE table.id = tmptable.id;


---------
ставя оценку - подумай, может ты не все описал.
Ответ отправил: Дмитрий Иванов (статус: 5-ый класс)
Отправлен: 14.11.2005, 16:54

Отвечает: RedDevil
Здравствуйте, Шапошников Игорь!
Дело в том, что вы используете подзапросы, а они поддерживаются MySQL начиная с версии 4.1. Так что www.mysql.org и качайте новую версию.
Ответ отправил: RedDevil (статус: 1-ый класс)
Отправлен: 15.11.2005, 06:11


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Яндекс Rambler's Top100 hotlog_js="1.0"; hotlog_r=""+Math.random()+"&s=314124&im=101&r="+escape(document.referrer)+"&pg="+ escape(window.location.href); document.cookie="hotlog=1; path=/"; hotlog_r+="&c="+(document.cookie?"Y":"N"); hotlog_js="1.1";hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N") hotlog_js="1.2"; hotlog_r+="&wh="+screen.width+'x'+screen.height+"&px="+ (((navigator.appName.substring(0,3)=="Mic"))? screen.colorDepth:screen.pixelDepth) hotlog_js="1.3" hotlog_r+="&js="+hotlog_js; document.write("HotLog")

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.phpplus
Архив рассылки
Отписаться
Вспомнить пароль

В избранное