Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: SQL-запрос для объединения таблиц  (Прочитано 52863 раз)
0 Пользователей и 1 Гость смотрят эту тему.
zuze
Опытный

ru
Offline Offline
Пол: Мужской
Россия, Москва


« Ответ #30 : 12-01-2010 11:25 » 

Алексей1153++, не понял что ты своим постом #28 хочешь сказать?
Записан
McZim
Модератор

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #31 : 12-01-2010 11:32 » 

zuze, а теперь наполни эти таблицы несколькими сотнями тысяч и посмотри план выполнения Улыбаюсь
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #32 : 12-01-2010 11:37 » 

т.е. cod's заранее известные значения?
Все равно не понятно. У тебя cod's может принимать несколько значений.

1. Таблица авторов
2. Таблица кодов
3. Таблица соответствий кодов таблице авторав
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
zuze
Опытный

ru
Offline Offline
Пол: Мужской
Россия, Москва


« Ответ #33 : 12-01-2010 11:39 » 

Цитата: McZim
а теперь наполни эти таблицы несколькими сотнями тысяч и посмотри план выполнения
Вы хотите сказать, что будут жуткие торможения.  
Записан
zuze
Опытный

ru
Offline Offline
Пол: Мужской
Россия, Москва


« Ответ #34 : 12-01-2010 11:42 » 

Sla, cod1 и cod2 это совершенно разные коды. cod1 может принимать одно или несколько значений и cod2 может принимать одно или несколько значений. Также cod1 или cod2 может быть пустым, но это крайне редко. Все значения в полях столбца cod1 и cod2 известны заранее.
Записан
McZim
Модератор

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #35 : 12-01-2010 11:44 » 

zuze, ты посмотри сначала на план, на стоимость, если тебя устроит то ради бога Улыбаюсь

Кстате, можно сделать так по тому примеру что я приводил.


* Screen shot 2010-01-12 at 14.42.16.png (16.66 Кб - загружено 1678 раз.)
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #36 : 12-01-2010 11:48 » 

zuze, я поясню.
Тебе понадобится добавить еще, например, cod3
Будешь делать alter table?

Проще создать таблицу cod3, а таблицы cod2 и  cod1 уже созданы, и привязать эту таблицу к таблице авторов, через таблицу параметров.

Если понадобится, то написать view, удовлетворяющую твоим требованиям.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #37 : 12-01-2010 12:30 » 

zuze, я предложил осмысленные названия к id_... Улыбаюсь
Записан

zuze
Опытный

ru
Offline Offline
Пол: Мужской
Россия, Москва


« Ответ #38 : 12-01-2010 13:29 » 

Цитата: Sla
1. Таблица авторов
2. Таблица кодов
3. Таблица соответствий кодов таблице авторав

Я же такое писал в посте #29, но вот твои пункты 1 и 3 там совмещены в одну таблицу. Я так понял это не правильно, так как это будет медленно работать и надо их разделить. Я правильно тебе понял? И таблиц кодов у меня ни одна, а две.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #39 : 12-01-2010 13:36 » 

мне все равно сколько у тебя таблиц кодов

Основная таблица
id
name

таблица ПАРАМЕТРЫ
название параметра
значение параметра
id записи которой принадлежит этот параметр.

Две таблицы, крути как хочешь
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #40 : 12-01-2010 19:50 » 

Ужас какой-то!

Всем предлагаю в качестве наряда вне очереди дать определения нормальных форм вплоть до 3УНФ, объяснить, зачем и в каких случаях делается переход от формы к форме, и представить декомпозицию исходной таблицы по каждой нормальной форме. Улыбаюсь
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
McZim
Модератор

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #41 : 12-01-2010 20:05 » 

Dimka, н всегда нужны нормальные формы
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #42 : 12-01-2010 20:07 » 

У меня есть таблица:

 -------------------------------------------
|id | cod1      | cod2          | author |
 -------------------------------------------
|1 |88.1,81.2|771.09,77.1|petrov  |
|2 |88.1,83.2|771.09        |ivanov  |
|...|....           |....               |....        |
|n |....           |....               |....        |
 -------------------------------------------

Но таблица в столбцах cod1 и cod2 не удовлетворяет первой нормальной форме (1НФ).

1НФ - требует, чтобы каждое значение атрибута или столбца было атомарным.

Я это исправил так:

Таблица2:

 ---------------------------
|id | cod1  | author_id |
 ---------------------------
|1 |88.1    |1               |
|2 |81.2    |1               |
|3 |88.1    |2               |
|4 |83.2    |2               |
 ---------------------------

Таблица3:

 ---------------------------
|id | cod2  | author_id |
 ---------------------------
|1 |771.09|1               |
|2 |77.1    |1               |
|3 |771.09|2               |
 ---------------------------

Таблица1:

 --------------
|id | author |
 --------------
|1  |petrov  |
|2  |ivanov  |
 --------------

Тогда SQL-запрос можно сделать так:


Код:
SELECT a.cod1, b.cod2, c.author FROM Таблица2 AS a, Таблица3 AS b, Таблица1 AS c
RIGHT JOIN Таблица2 AS a on a.author_id=c.id
RIGHT JOIN Таблица3 AS b on b.author_id=c.id

А что делать, если у разных авторов может повторятся author_id в таблицах 2 и 3?

Тогда же author_id в таблицах 2 и 3 не будет совпадает с id из таблицы 1.

По требованию Dimka прочитано Улыбаюсь , в том числе и первый пост

А что делать, если у разных авторов может повторяться author_id в таблицах 2 и 3?
zuze, А как ты это представляешь?

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
zuze
Опытный

ru
Offline Offline
Пол: Мужской
Россия, Москва


« Ответ #43 : 12-01-2010 20:41 » 

Цитата: Sla
А что делать, если у разных авторов может повторяться author_id в таблицах 2 и 3?
zuze, А как ты это представляешь?

Я это писал в посте #3, но напишу ещё раз  

-------------------------------------------
|id | cod1      | cod2          | author |
 -------------------------------------------
|1 |88.1,81.2|771.09,77.1|petrov  |
|2 |88.1,83.2|771.09        |ivanov  |
|3 |89           |200.01        |sushkin|
|4 |88.1,81.2|200.01        |vilkin    |
 -------------------------------------------

А вот и повторения о которых Вы спрашивали.
Как видно из этой таблицы у авторов petrov и vilkin совпадает cod1, а следовательно будет совпадать author_id.
Как видно из этой таблицы у авторов sushkin и vilkin совпадает cod2, а следовательно будет совпадать author_id.

И что же в таком случае делать?

Может можно обойтись без переделки таблиц, а добавить какие-то дополнительные условия в SQL-запрос

Код:
SELECT a.cod1, b.cod2, c.author FROM Таблица2 AS a, Таблица3 AS b, Таблица1 AS c
RIGHT JOIN Таблица2 AS a on a.author_id=c.id
RIGHT JOIN Таблица3 AS b on b.author_id=c.id
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #44 : 12-01-2010 20:52 » 

тогда скажи что такое author_id?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
zuze
Опытный

ru
Offline Offline
Пол: Мужской
Россия, Москва


« Ответ #45 : 12-01-2010 21:20 » 

Цитата: Sla
тогда скажи что такое author_id?
author_id - это идентификатор кода (cod1 и cod2) конкретного автора.

И из-за того что author_id из Таблицы2 или Таблицы3 не всегда равен id Таблицы1 у меня возник вопрос, то ли SQL-запрос надо модифицировать, то ли таблицы иначе составлять.
« Последнее редактирование: 12-01-2010 21:23 от zuze » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #46 : 12-01-2010 21:51 » 

zuze, ужас!

По всем понятиям author_id — это идентификатор автора. Не кода!!!
А потом уже к автору привязываются коды.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
zuze
Опытный

ru
Offline Offline
Пол: Мужской
Россия, Москва


« Ответ #47 : 12-01-2010 22:12 » 

Цитата: RXL
По всем понятиям author_id — это идентификатор автора. Не кода!!!

Если уж такая путаница с этими идентификаторами давайте их перепишем с нормальными названиями, что бы путаниц не было.

Таблица2:

 -----------------------------------
|id_cod1 | cod1  | num_cod1 |
 ----------------------------------- |
|1           |88.1    |1                |
|2           |81.2    |1                |
|3           |88.1    |2                |
|4           |83.2    |2                |
 -----------------------------------

Таблица3:

 -----------------------------------
|id_cod2 | cod2  | num_cod2 |
 ----------------------------------- |
|1           |771.09|1                |
|2           |77.1    |1                |
|3           |771.09|2                |
 -----------------------------------

Таблица1:

 ------------------------
|id_author | author |
 ------------------------
|1              |petrov   |
|2              |ivanov   |
 ------------------------- 

Вот теперь author_id, обозначает, то как написал RXL.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #48 : 12-01-2010 22:21 » 

И теперь видно, что связь между таблицами отсутствует - требуется еще одна или две таблицы для связей. А num_cod1 и num_cod2 вообще не понятно для чего...


Вопрос: а какая СУБД используется?
« Последнее редактирование: 12-01-2010 22:23 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
zuze
Опытный

ru
Offline Offline
Пол: Мужской
Россия, Москва


« Ответ #49 : 12-01-2010 22:38 » 

Цитата: RXL
Вопрос: а какая СУБД используется?
mysql

Если у меня всё так косо и криво я попробую привести ещё раз начальную таблицу и поясню её более подробно.

 -------------------------------------------
|id | cod1      | cod2          | author |
 -------------------------------------------
|1 |88.1,81.2|771.09,77.1|petrov  |
|2 |88.1,83.2|771.09        |ivanov  |
|3 |89           |200.01        |sushkin|
|4 |88.1,81.2|200.01        |vilkin    |
|...|....           |....               |....        |
|n |x,y           |u,v              |z          |
 -------------------------------------------

Подробности:
1. Я хочу эту таблицу нормализовать.
2. После столбца "author", есть ещё куча столбцов. Я их убрал для простоты примера, но каждое значение столбца связанно с другим значением другого столбца относящегося к конкретному автору (Например, есть столбец "Полное название учебного заведения").
3. Значения в столбцах cod1, cod2 и author известны и вбиваются оператором, значения в столбце id генерируется СУБД.
4. В столбцах cod1 или cod2 значение относящаяся к конкретному автору может быть пустое.
5. Значения столбцов cod1 и cod2 у разных авторов может совпадать.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #50 : 13-01-2010 08:31 » 

Цитата: McZim
Dimka, н всегда нужны нормальные формы
Все наши беды от пуговицы. Специально повторяю ключевую фразу:
Цитата: Dimka
ОБЪЯСНИТЬ, ЗАЧЕМ И В КАКИХ СЛУЧАЯХ ДЕЛАЕТСЯ ПЕРЕХОД ОТ ФОРМЫ К ФОРМЕ
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
zuze
Опытный

ru
Offline Offline
Пол: Мужской
Россия, Москва


« Ответ #51 : 13-01-2010 08:54 » 

Цитата: Dimka
ОБЪЯСНИТЬ, ЗАЧЕМ И В КАКИХ СЛУЧАЯХ ДЕЛАЕТСЯ ПЕРЕХОД ОТ ФОРМЫ К ФОРМЕ
Я к сожалению знаю, только такое, что нормализация нужна, что бы избежать проблем при увеличении таблиц в будущим.
А будут ли увеличиваться таблицы или нет в будущем это обычно заранее не известно.

Если в моём случае можно не нормализировать таблицу, то могли бы Вы объяснить подробно почему, а если есть про все формы нормализации такая информация, я только буду рад её почитать.

К сожалению в моих книгах кроме определения нормализации и их форм с примерами, не даны обоснования когда нужно нормализировать, а когда нет.
Записан
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #52 : 13-01-2010 10:26 » 

Разбейте по сущностям:
Таблица авторов, таблица для cod1, для cod2 и сводная, куда заносятся id из каждой вышеназванной. Или я что-то не понял?
Записан

С уважением, Oldy.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #53 : 13-01-2010 13:46 » 

Цитата: zuze
К сожалению в моих книгах кроме определения нормализации и их форм с примерами, не даны обоснования когда нужно нормализировать, а когда нет.
Так прямо нигде и написано про аномалии удаления, добавления, изменения?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
zuze
Опытный

ru
Offline Offline
Пол: Мужской
Россия, Москва


« Ответ #54 : 13-01-2010 14:42 » 

Цитата: Dimka
Так прямо нигде и написано про аномалии удаления, добавления, изменения?

У меня всего три книги:
1. Бен Форта. Освой самостоятельно SQL. 10 минут на урок. 3-е издание
В этой книге описаны только примеры операторов и некоторые различия языка SQL для разных СУБД.

2. Люк Веллинг, Лора Томсон. Разработка Web-приложений с помощью PHP и MySql. 2-е издание.
В этой книге описаны только стандартные таблицы и использование индексов.

3. Люк Веллинг, Лора Томсон. MySql учебное пособие.
В этой книге они есть. Сейчас буду читать и вникать.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #55 : 13-01-2010 16:26 » new

zuze, у нас есть несколько статей по нормализации - думаю. что это будет лучше, чем "10 минут на урок".

https://club.shelek.ru/viewart.php?id=177
https://club.shelek.ru/viewart.php?id=311

Еще статьи здесь: https://club.shelek.ru/view.php?id=15
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines