Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.11.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.036 c
15-1193044810
@Ujin
2007-10-22 13:20
2007.11.25
imgedit.exe - где он? А чем теперь делать ресурсы dcr ???


2-1193791900
Riply
2007-10-31 03:51
2007.11.25
Скорость сравнения строк в Ansi и Unicode формате.


6-1174306146
Vostrik
2007-03-19 15:09
2007.11.25
IdSMNP


11-1178208197
Даддитс
2007-05-03 20:03
2007.11.25
Оптимизация


3-1184321322
Bogdan1024
2007-07-13 14:08
2007.11.25
тип параметра "множество"





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский