Форум: "Начинающим";
Текущий архив: 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