![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Объединение таблиц. [D5, dBase, FoxPro, Paradox]
Merlot © (2003-04-22 17:05:00)Здравствуйте Уважаемые!
Есть три таблицы: m1 сполями (link, kod), m2 с полями (link, m1, kod, zn) , k1 с полями (link, kod). В m1 и k1 содержатся набор данных. В m2 заносяться не пустые данные из k1, и каждой строчке присваивается link из m1. Как мне сделать объединение что бы в DBGride выводились все строчки из k1 и соответствующие строчки из m2, но при этом данные из m2 выводятся не все а равные какому то значению link из m1.
Вид таблиц приблизительно такой:
m1: link-kod m2: link-m1-kod-zn k1: link-kod
10 1 1 10 1 55 1 115
11 2 2 10 3 6 2 116
3 10 5 89 3 117
4 118
5 119
Спасибо!!!
ЮЮ (2003-04-24 04:22:00) [1]В чем проблема - то
SELECT
...
FROM
MAIN1 /* отсюда пойдет только одна строка */
LEFT JOIN MAIN3 ON MAIN1.<ID> = MAIN3.MAIN1
/* прицепили только те "коды", что есть в MAIN3 */
LEFT JOIN S_KOD ON MAIN3.KOD = S_KOD.LINK
/* расшифровали эти коды *.
WHERE ...
/* выбрали нужные предприятия */
ORDER BY MAIN1.<NAME>, S_KOD.KOD
Merlot (2003-04-23 14:35:00) [2]Не получается :))))
Посоветуйте как мне таблице переделать. Такая ситуация:
допустим есть таблица - tablica1 в которой забиты организации с различными данными: инн, адрес, название и т.д.
есть еще таблица - tablica2 в которой забиты различные коды. В организацях по этим кодам есть какие то данные (не повсем кодам, а выборочно. Допустим кодов всего 50-60, а данных в организациях всего по 5-10 кодам, а остальные пустые).
Так вот надо в третью таблицe - tablica3 по каждой организации эти данные по кодам разнести. Не могу же я тащить каждый раз все 50-60 кодов, это у меня база каких размеров будет, вот мне и надо в tablica3 копировать только не пустые коды, и опять же тащить полную структуру кодов или же только ссылки на них? И вот какя еще проблема в tablica3 кроме организайии есть еще полей 20 с другими данными. Если использовть четвертую таблицы - tablica4 (только для кодов из tablica2 и ссылок на tablica3), то я не могу вытащить из нее данные которые мне нужны. Такая проблема...:))))
Соловьев (2003-04-23 13:48:00) [3]
select t3.*
from main3 t1
join main1 t2 on t1.link=t2.link
join s_kod t3 on t1.kod=t3.kod
where t2.link="22"
Merlot (2003-04-23 13:45:00) [4]Выдало тотже результат что и с объединением...
А можно сделать сначало выборку в main3 по полю main1, а потом объеденить с s_kod?
Mike Kouzmine (2003-04-23 13:21:00) [5]Есть такая вещь - SQLBilder. Если не знаешь SQL как хотелось бы, то, иногда, помогает.
Соловьев (2003-04-23 13:15:00) [6]
> Не помоголо,
что хоть выдало?
merlot (2003-04-23 13:13:00) [7]Не помоголо, но все равно спасибо. Будем искать другие пути, мож базу перекраю ил еще чо... Спасибо.
Соловьев (2003-04-23 12:09:00) [8]может так?
select t2.*
from main2 t1, s_kod t2, main1 t3
where (t1.kod=t2.kod) and (t1.link=t3.link) and (t3.link="22")
Merlot (2003-04-23 11:53:00) [9]таблица main2 связана с таблицей s_kod по полю kod, с таблицей main1 по полю main1 (т.е. в main2 поля: main1, s_kod, и т.д.)
Соловьев (2003-04-23 11:01:00) [10]и еще поля связи плиз.
Merlot (2003-04-23 10:26:00) [11]Еще раз: три таблицы main1, main2, s_kod. В main1 хранятся link и еще какие то поля с данными, в s_kod хранятся link, коды и их описание (три поля), в main2 хранятся link-и и коды из s_kod, с данными по кодам, но не все коды а выборочно (те коды, которые при заполнение были не пустыми) и link-и из main1. Вот мне и нужно вывести в DBGrid-е все коды из s_kod, соответствующие им данные из main2, но при этом выводятся не все данные из main2, а те которые равны определенному значению link из main1.
Соловьев (2003-04-23 10:08:00) [12]
> Понятно объяснил?
извини, но нет... :)
> из первой таблице s_kod
а что тогда main1?
Merlot (2003-04-23 10:04:00) [13]Хорошо на конкретном примере: мне надо выбрать все строки из первой таблице s_kod, соответствующие ей из main3, но равнsе какому то значению из main1. Т.е. в таблицу main3 пишутся коды из s_kod и каждому записанному коду присваивается один код из main1. Понятно объяснил?
Соловьев (2003-04-23 09:53:00) [14]а где вторая таблица?
И
> NickBat © (22.04.03 18:15)
прав на 100%.
Merlot (2003-04-23 09:07:00) [15]В вопросе все написано для чего мне надо условие...
NickBat (2003-04-22 18:15:00) [16]> были всеиз третий
> where ( MAIN3.MAIN1="5");
И как это понимать все, но только те, что условию удовлетворяют? :))
Merlot (2003-04-22 17:59:00) [17]SELECT
MAIN3.MAIN1,
MAIN3.KOD,
MAIN3.CDATA,
MAIN3.DTDOK,
S_KOD.LINK,
S_KOD.KOD AS name_KOD,
S_KOD.NAME,
S_KOD.DATATYPE,
S_KOD.SUMMA,
S_KOD.INPUT,
S_KOD.FORMULA,
S_KOD.HEADER,
S_KOD.XKOD,
S_KOD.ORDER,
S_KOD.PRINT,
S_KOD.LATER
FROM
S_KOD
LEFT OUTER JOIN MAIN3 ON S_KOD.LINK=MAIN3.KOD
where
(MAIN3.MAIN1="5");
такой запрос дает мне только те данные которые удовлитворяют условию...
Соловьев (2003-04-22 17:46:00) [18]покажи что ты делаешь
Merlot (2003-04-22 17:39:00) [19]Если я добавляю условие, то выбираются не все записи из третей таблицы, а мне надо что были все из третий и из второй равные одному значению из первой...
Соловьев (2003-04-22 17:32:00) [20]
> случае выбираются все записи,
а условие можешь добавить?
...
where <>