Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.25;
Скачать: CL | DM;

Вниз

Объединение трех таблиц   Найти похожие ветки 

 
Alex8   (2007-11-04 08:01) [0]

Здраствуйте !
 Подскажите, пожалуйста, как объединить 3 таблицы (T1, T2, T3).
Пробовал разные варианты. Например, один из них:

SELECT T1.p1, T2.p2, T3.p3 FROM T1  LEFT OUTER JOIN T2  ON <условие>....???     LEFT OUTER JOIN T3  ON  <условие>.. WHERE.....

Спасибо.


 
DrPass ©   (2007-11-04 11:40) [1]


> Alex8   (04.11.07 08:01)  

Здравствуйте!
Подскажите пожалуйста, куда я вчера положил колбасу
Пробовал разные варианты. Например, один из них:

Заглянул в шкафчик на кухне

Спасибо.

Попробуй ответить на мой вопрос, а тогда можно будет ответить на твой. Он по смыслу абсолютно такой же.


 
Anatoly Podgoretsky ©   (2007-11-04 12:34) [2]

Это соединение, а не объединение, объединение делается через UNION


 
Alex8   (2007-11-04 12:50) [3]

Согласен. Плохо сформулирован вопрос.
Но я имел ввиду объединение с использованием
      LEFT OUTER JOIN ....  ON <условие>....

Когда 2 таблицы, все ясно, а если 3 и нужно сделать 2 последовательные
выборки?

М.б так:
SELECT T1.p1, T2.p2, T3.p3 FROM SELECT T3.p3, T2.p2 LEFT OUTER JOIN T2  ON <условие>....  FROM  LEFT OUTER JOIN T1  ON <условие>....


 
Anatoly Podgoretsky ©   (2007-11-04 12:58) [4]


> Alex8   (04.11.07 12:50) [3]

Еще раз, нет здесь объединения!!!


 
sniknik ©   (2007-11-04 13:03) [5]

> а если 3 и нужно сделать 2 последовательные выборки?
синтаксис, и вообще возможность,  зависит от непоказанного типа базы (движка)...
и кстати, ни один движок не воспринимает многоточие в запросах...


 
Alex8   (2007-11-04 13:05) [6]

> Еще раз, нет здесь объединения!!!

Ну пусть соединение. Ведь ясно, о чем речь.


 
sniknik ©   (2007-11-04 13:06) [7]

> Еще раз, нет здесь объединения!!!
напомнило.

кстати о терминах "2 последовательные выборки" это пакет  вот так
SELECT * FROM T1

SELECT * FROM T2

то что ты возможно имеешь в виду это подзапрос.


 
sniknik ©   (2007-11-04 13:07) [8]

> Ведь ясно, о чем речь.
а вот тут ты ошибаешься, причем очень серьезно.


 
Alex8   (2007-11-04 13:18) [9]

> синтаксис, и вообще возможность,  зависит от непоказанного
> типа базы (движка)...
> и кстати, ни один движок не воспринимает многоточие в запросах.

 Убрали многоточия.  База-"PARADOX".

Файлы для выборки Т1, Т2, Т3.

Некоторым (не всем) записям в Т1 соответствует (по ключу) группа записей из Т2, аналогично  некоторым  записям в Т2 соответствует группа записей из Т3.


 
Kolan ©   (2007-11-04 13:23) [10]

SELECT * FROM Т1, Т2, Т3
WHERE (T1.ID = T2.ID) AND (T2.ID = T3.ID)

Так?


 
Alex8   (2007-11-04 13:35) [11]

> Kolan ©   (04.11.07 13:23) [10]
> Так?

Может быть. Надо подумать и проверить.
 Что-то похожее я делал, только не "AND" , а "OR" .
Результат - астрономическое число записей.
 Возможно потому, что нет взаимной однозначности записей.
Во всяком случае я попробую.


 
sniknik ©   (2007-11-04 13:38) [12]

Alex8   (04.11.07 13:18) [9]
осталось еще "а что именно ты хочеш получить?"

Kolan ©   (04.11.07 13:23) [10]
имхо, объединение лучше писать явно...
у тебя ошибка "перевода", LEFT OUTER в запросе выше это скорее T1.ID <> T2.ID чем равно (вернее должно быть так *=, все с одной стороны независимо от равенства, но такого синтаксиса в BDE вроде нет).
хотя, без ответа на оставшийся (см. выше) вопрос to Alex8, с уверенностью этого сказать нельзя... а вдруг именно это ему и нужно?

Alex8
синтаксис Local SQL тайной не является, и есть в хелпе при установленном дельфи... вполне мог за 5 мин посмотреть там... чем полдня здесь... (хотя конечно многих "мудрых" ;о) мыслей бы не услышал...)


 
Alex8   (2007-11-04 14:09) [13]

> синтаксис Local SQL тайной не является

 Но не при моем ужасном английском.
Посмотрел (дольше 5 минут), но самого синтаксиса
не нашел.    

Спасибо всем за участие.


 
sniknik ©   (2007-11-04 14:38) [14]

> Посмотрел (дольше 5 минут), но самого синтаксиса
> не нашел.
набираешь в предметном указателе справки по Local SQL "OUTER join"
первыми же строками идет
Joins two tables based on column values common between the two, including non-matches.

SELECT column_list
FROM table_reference
  LEFT | RIGHT | FULL [OUTER] JOIN table_reference
   ON predicate
 [LEFT | RIGHT | FULL [OUTER] JOIN table_reference
   ON predicate...]
....


английский даже и не нужен. синтаксис как раз на примере соединения 2х таблиц... добавление 3-й, 4-й, ...  по аналогичной логике, не тебует объяснений (иначе бы они были там же в хелпе)


 
Anatoly Podgoretsky ©   (2007-11-04 14:42) [15]


> Ну пусть соединение. Ведь ясно, о чем речь.

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


 
Alex8   (2007-11-04 15:58) [16]

> sniknik ©   (04.11.07 14:38) [14]

 У нас. видно, разные "Help" .
По Вашей любезной рекомендации набрал в Предметном
указателе Local SQL "OUTER join" и обнаружил там только
Local SQL (т.е. "OUTER join" отсутствует).
  Дальше, развивая Local SQL, попадаю в раздел
"Productivity Tools",  где около 10 позиций и ни в одной
из них нет даже упоминания о  "OUTER join".
  Жалко. Но ознакомиться с указанным разделом не смог.


 
Anatoly Podgoretsky ©   (2007-11-04 16:03) [17]

Странный у тебя какой то Help
У меня сразу указывает на приведеное.


 
Alex8   (2007-11-04 17:53) [18]

> Anatoly Podgoretsky ©   (04.11.07 14:42) [15]

>  А вот что ты действительно  хочешь сделать, то об этом не говоришь,

  Прошу прощения, но я рискну признаться, что я действительно, не вижу разницы между  обЪединением и соединением,  когда речь
идет о выборках. Каюсь. Но врядли стоит дискутировать по этому поводу.    

    А теперь, что я хочу сделать.
Я хочу получить выборку данных из 3-х файлов. 1-й содержит основную
информацию. Два других ее детализируют. Для одних записей файла-1
детализации нет, для других она размещается в группе записей файла-2,
для третьих помимо некоторые записи файла-2 детализируются далее в
группе записей файла-3. Наконец, есть записи файла-1, которые детализируются только в файле-1 (без файла-2).
   Отсюда, возникает вопрос как получить выборку ?
Выполнять одну общую выборку по схеме
 SELECT T1.p1, T2.p2, T3.p3 FROM T1, T2, T3 ......
или выполнять последовательно три выборки (из  T1, T2, T3 )   и затем
обЪединить (или соединить) полученные результаты. Что проще и эффективнее.
  Попутно возник ворпос о том как использовать конструкцию
LEFT OUTER JOIN < >  ON <> в случае трех файлов (1-й вариант организации выборки).
  Интуитивно я склоняюсь к 1 варианту.
  Хотелось бы узнать Ваше мнение по этому поводу.


 
Anatoly Podgoretsky ©   (2007-11-04 18:10) [19]

> Alex8  (04.11.2007 17:53:18)  [18]

Соединение по одному из множества соединений, описано в справке.



Страницы: 1 вся ветка

Текущий архив: 2007.11.25;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.019 c
2-1194249160
ASDE
2007-11-05 10:52
2007.11.25
RegisterServiceCtrlHandlerEx


15-1192827366
Nic
2007-10-20 00:56
2007.11.25
Какой регистратор лучше для...


2-1194101176
SveTTT
2007-11-03 17:46
2007.11.25
условный оператор проверяет значение...


2-1193925089
Darvin
2007-11-01 16:51
2007.11.25
Скроллинг в DrawGrid


3-1184361774
Anar
2007-07-14 01:22
2007.11.25
Как в DBGrid задать цвет конкретной строке?