







|
MySQL.RU - Webboard
Вернуться
Всё одним запросом (encyclop) 13/12/2001 - 14:18:45
Re: Всё одним запросом (dim-dim) 13/12/2001 - 15:25:27
Re: Таблица-связка - геморрой (encyclop) 13/12/2001 - 16:42:27
Re: Таблица-связка (Василий) 13/12/2001 - 18:21:47
Re: Таблица-связка - геморрой (dim-dim) 13/12/2001 - 23:41:40
Re: Re:Всё одним запросом (???) 14/12/2001 - 12:27:18
Re: 2dim-dim (Василий) 14/12/2001 - 13:33:48
Re: А еще один пример? (Константин) 14/12/2001 - 13:53:46
Re: А еще один пример? (Василий) 14/12/2001 - 15:13:44
Re: 2 Василий (dim-dim) 14/12/2001 - 15:33:16
Re: Re: Re: А еще один пример? (Константин) 15/12/2001 - 12:23:22
Re: 2 dim : ОК, согласен :) (Василий) 17/12/2001 - 14:56:55
Re: 2 Константин (Василий) 17/12/2001 - 15:11:47
Re: 2 Василий (Константин) 18/12/2001 - 11:20:52
Re: re (Василий) 18/12/2001 - 13:38:07
Re: А еще один пример? (Maxim) 19/12/2001 - 01:49:30
Re: А еще один пример? про миллион (Константин) 19/12/2001 - 07:54:58
Re: 2 Maxim (Василий) 19/12/2001 - 13:58:35
Re: 2 Константин (Василий) 19/12/2001 - 14:14:45
Re: 2dim-dim (Именно это я хотел) 19/12/2001 - 20:25:39
Re: 2dim-dim (А воз и ныне там) 19/12/2001 - 20:32:14
> Original message text:
> From: encyclop - 13/12/2001 - 14:18:45
> Subject:Всё одним запросом
> -----------------
> Есть две таблицы
>
> Первая
> texts (тексты - номер, название, сам текст, ссылка на id автора/авторов через запятую (вторая таблица))
>
> id | name | text | authors
>
> Вторая
> authors (авторы - номер, имя, фамилия)
>
> id | name | surname
>
> К этому делу SQL-запрос
> select * from texts, authors where authors.id in (texts.authors);
>
> Всё вроде бы OK, но если число авторов больше 1, то запрос берет только того, id которого стоит самым первым.
> Как быть, обойдясь ВСЕГО ОДНИМ запросом?
>
From: Василий - 19/12/2001 - 13:58:35
Subject:2 Maxim
-----------------
Как много восклицательных знаков.
Пожалуйста, есть решение лучше - предлагайте.
А вот глумления этого - НЕ НАДО.
Я бы лично всей душой использовал что-то вроде
delete from child where not parent_id in (select parent_id from parent);
и дальше в этом духе. Но MySQL этого пока не поддерживает.
Все эти дела решаются внешними ключами, как известно. Но их тоже пока нет (вернее есть в 4.0, которая альфа и под юникс - пожалуйста, можете ставить её).
Так вот, поскольку MySQL не имеет средств для поддержки ссылочной целостности, их приходится как-то заменять. Всякому ясно, что самопальные средства в большей или меньшей степени будут корявы. Я пробовал такой подход на родительской (60000 записей) и дочерней (450000 записей) - ничего ужасного не заметил. Конечно, не быстро. Но один раз - можно.
Я НЕ предлагаю этот подход как постоянное средство. Это надо делать как разовую операцию (если очень надо), а дальше клиентскими средствами следить чтобы не было потомков без родителей.
Если заведомо известно, что потомков без родителей мало, можно так :
create table missing_parents as
select c.parent_id from child c left join parent p on
c.parent_id = p.parent_id where p.parent_id is null;
а дальше скриптом пробегать по всем этим значениям и удалять соотв. записи из child.
Не нравится так - делайте что-то свое. Хоть сами внешние ключи или вложенные селекты допишите в MySQL, исходники свободные. Все только спасибо скажут.
Конструктивных предложений я что-то пока не слышал. Я пока что больше слышал "Ой, а как мне сделать вот это" и "Не, это хреново".
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
1261
|
|