Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




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, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
1261



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |