Форум: "Базы";
Текущий архив: 2003.11.03;
Скачать: [xml.tar.bz2];
Внизобьединение таблиц Найти похожие ветки
← →
uu (2003-10-13 13:10) [0]Подскажите возможноли sql запросом выбрать из
2ух таблиц по 2 колонки и врезультате получить 3 таблицу с 4я колонками
но так чтобы не было декартового произведения таблиц
например
SELECT Prihod.PrhSumm, Prihod.PrhKlient, Rashod.RzSumm, Rashod.RzKlient
FROM Prihod, Rashod
дает декартово произведение
← →
Bob (2003-10-13 13:18) [1]Это конечно все класно, только подумай над вопросом: а как это все связано? С помощью твоего запроса ты получишь просто помойку. Есть в скуле такой оператор как JOIN. (Но это эсли ты хочешь получить таблицу связанных данных).
← →
uu (2003-10-13 13:20) [2]втом то и дело что связанных данных не должно быть так как из
исходных таблиц записи добавляются и удаляются независимо
← →
MsGuns (2003-10-13 13:20) [3]1.Без общего поля-ключа не получится
2.Если нужен просто НД (для отображения или репорта), то запрос,
если именно таблица, то запрос+TBatchMove или запросом создать таблицу нужной структуры, а туда запросом (через общий ключ) закатать записи. Если общего ключа нет, то формировать записи ручками и insert в новую таблицу из двух исходных.
← →
Bob (2003-10-13 13:28) [4]Тогда вопрос: а нахрена все это надо? Объясни проблему конкретнее. А так собрать помойку из двух таблиц... Смысл не понятен.
← →
uu (2003-10-13 13:32) [5]нет помойки как раз не надо!
надо вывести на один репорт колонки из двух НД
для этого и требуется получить единую таблицу из 4 колонок
но чтобы первые 2 колонки и последние 2 не были никак связаны
то есть заполнялись соответсвенно содержимому исходных таблиц
← →
MsGuns (2003-10-13 13:37) [6]Связка OUTER JOIN
← →
Bob (2003-10-13 13:39) [7]Ну если надо так надо. Попробуй конечно свой запрос, посмотри,что получиться. Если то что надо - поздравляю, если нет - придется тебе вязать это все.
← →
uu (2003-10-13 13:56) [8]а что такое OUTER JOIN?
можно пример?
← →
Наталия (2003-10-13 13:56) [9]Может быть, union тебе поможет?
← →
uu (2003-10-13 13:57) [10]на OUTER ругается
← →
uu (2003-10-13 13:59) [11]ясн OUTTER :)
но не пормогает :(
а что такое union?
← →
Vlad (2003-10-13 14:00) [12]нет в парадоксе OUTER.
Тем более, что все равно с помощью него ты получишь произведение множеств.
А то, что ты хочешь, одним SQL запросом реализовать нельзя.
← →
Наталия (2003-10-13 14:01) [13]uu © (13.10.03 13:59) [11]
Документацию почитай по SQL, наконец.
← →
Vlad (2003-10-13 14:02) [14]>Наталия © (13.10.03 14:01) [13]
Что-то никак не соображу, а union каким образом автору поможет ?
← →
Bob (2003-10-13 14:11) [15]UNION не поможет однозначно, т.к. выдаст простыню в две колонки, а не в четыре.
← →
Наталия (2003-10-13 14:12) [16]SELECT Prihod.PrhSumm, Prihod.PrhKlient, 0, 0
from Prihod
union all
select 0, 0, Rashod.RzSumm, Rashod.RzKlient
FROM Rashod
← →
DenK_vrtz (2003-10-13 14:15) [17]>>надо вывести на один репорт колонки из двух НД
так какие проблемы?!
Делаешь два независимых запроса.
Если это QR, то указываешь в свойстве DataSet отчета тот DataSet, у которого записей больше(думаю, объяснять не надо почему!).
А дальше как обычно - через QRDBText"ы.
Или все в Excel!
← →
MsGuns (2003-10-13 14:19) [18]select T1.F1 as FU1, T1.F2 as FU2, T2.F1 as FU3, T2.F2 as FU4
from Table1 T1 FULL OUTER JOIN Table2 ON T1.F1=T2.F1
order by ...
(поля F1 в примере однотипные)
← →
uu (2003-10-13 15:00) [19]Наталья, в Вашем примере
Type mismatch in expression.
← →
Vlad (2003-10-13 15:06) [20]>uu © (13.10.03 15:00) [19]
Поля д.б. однотипные в обоих селектах.
← →
uu (2003-10-13 15:27) [21]и как быть?
у меня не однотипные сумма - числовой
а клиент - строка
← →
DenK_vrtz (2003-10-13 15:31) [22]>и как быть?
пиво пить и типы приводить
← →
MsGuns (2003-10-13 15:32) [23]>Bob © (13.10.03 14:11) [15]
>UNION не поможет однозначно, т.к. выдаст простыню в две колонки, а не в четыре.
Колонок будет 4, а записей N+M, а надо MAX(N,M). Т.е. надо как бы слить по паре колонок из двух таблиц в одну. А вместо UNION можно и так:
SELECT C.cid, C.cname, P.pid, P.pname
FROM CST C FULL OUTER JOIN PRO P ON C.cname=P.pname
А вот получить то, что надо по сабжу пока не соображу как ;((
← →
Vlad (2003-10-13 15:45) [24]Впринципе можно сделать 2 отдельных DataSet"a и результат из обоих в цикле поместить в ClientDataSet.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.11.03;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.01 c