Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.22.51.241] |
|
Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Сообщ.
#1
,
|
|
|
Сабж. Даны две таблицы
Первая CREATE TABLE IF NOT EXISTS `table1` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `uid` int(11) NOT NULL, PRIMARY KEY (`ID`) ) ; Вторая, связана с первой "многие к одному" по полю uid CREATE TABLE IF NOT EXISTS `table2` ( `id` int(11) NOT NULL AUTO_INCREMENT, `uid` int(11) NOT NULL, `check_variant` int(10) unsigned NOT NULL, `comment` varchar(512) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', PRIMARY KEY (`id`) ); Задача: удалить строки в обоих таблицах при условии table2.comment<>'foo' AND table2.check_variant<100 AND table1.ID=table2.uid Можно ли такое упихать в один запрос? |
Сообщ.
#2
,
|
|
|
Цитата Gonarh @ Можно ли такое упихать в один запрос? Попробуй самостоятельно по мануалу: http://www.mysqltutorial.org/mysql-delete-join/ |
Сообщ.
#3
,
|
|
|
Посмотрел, почти то что надо, получилось такое
DELETE t1, t2 FROM t1 INNER JOIN t2 ON t1.ID = t2.uid WHERE t2.comment<>'foo' AND t2.check_variant<100; M Просьба оформлять SQL тегом CODE если бы не одно но. При условии наличия table2.comment='foo' AND table2.check_variant<100 удалять ВООБЩЕ ничего не надо, а такое условие просто не учитывается. |
Сообщ.
#4
,
|
|
|
DELETE t1, t2 FROM t1, t2, (SELECT t2.uid FROM t2 GROUP BY t2.uid HAVING SUM(t2.comment='foo' AND t2.check_variant<100) = 0 ) t3 WHERE t1.ID = t2.uid AND t2.uid = t3.uid |
Сообщ.
#5
,
|
|
|
Оно. Вот так меня устроило
DELETE t1, t2 FROM t1, t2, (SELECT t2.uid FROM t2 GROUP BY t2.uid HAVING (SUM(t2.comment='foo' AND t2.check_variant<100) = 0) AND (SUM(t2.comment='bar' AND t2.check_variant<100) > 3) ) t3 WHERE t1.ID = t2.uid AND t2.uid = t3.uid |