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

Вниз

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

 
Merlot ©   (2003-04-22 17:05) [0]

Здравствуйте Уважаемые!
Есть три таблицы: 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-22 17:17) [1]

join - все совпадающие записи
left join - из главной все + те что совпадают

пример:
select t1.*
from table t1 join table t2 on t1.id=t2.id


 
Merlot ©   (2003-04-22 17:23) [2]

В этом случае выбираются все записи, а я же написал, что мне надо выбирать не все.


 
Соловьев ©   (2003-04-22 17:32) [3]


> случае выбираются все записи,

а условие можешь добавить?
...
where <>


 
Merlot ©   (2003-04-22 17:39) [4]

Если я добавляю условие, то выбираются не все записи из третей таблицы, а мне надо что были все из третий и из второй равные одному значению из первой...


 
Соловьев ©   (2003-04-22 17:46) [5]

покажи что ты делаешь


 
Merlot ©   (2003-04-22 17:59) [6]

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");
такой запрос дает мне только те данные которые удовлитворяют условию...


 
NickBat ©   (2003-04-22 18:15) [7]

> были все из третий
> where ( MAIN3.MAIN1="5");
И как это понимать все, но только те, что условию удовлетворяют? :))


 
Merlot ©   (2003-04-23 09:07) [8]

В вопросе все написано для чего мне надо условие...


 
Соловьев ©   (2003-04-23 09:53) [9]

а где вторая таблица?
И
> NickBat © (22.04.03 18:15)
прав на 100%.


 
Merlot ©   (2003-04-23 10:04) [10]

Хорошо на конкретном примере: мне надо выбрать все строки из первой таблице s_kod, соответствующие ей из main3, но равнsе какому то значению из main1. Т.е. в таблицу main3 пишутся коды из s_kod и каждому записанному коду присваивается один код из main1. Понятно объяснил?


 
Соловьев ©   (2003-04-23 10:08) [11]


> Понятно объяснил?

извини, но нет... :)


> из первой таблице s_kod

а что тогда main1?


 
Merlot ©   (2003-04-23 10:26) [12]

Еще раз: три таблицы 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 11:01) [13]

и еще поля связи плиз.


 
Merlot ©   (2003-04-23 11:53) [14]

таблица main2 связана с таблицей s_kod по полю kod, с таблицей main1 по полю main1 (т.е. в main2 поля: main1, s_kod, и т.д.)


 
Соловьев ©   (2003-04-23 12:09) [15]

может так?

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 13:13) [16]

Не помоголо, но все равно спасибо. Будем искать другие пути, мож базу перекраю ил еще чо... Спасибо.


 
Соловьев ©   (2003-04-23 13:15) [17]


> Не помоголо,

что хоть выдало?


 
Mike Kouzmine ©   (2003-04-23 13:21) [18]

Есть такая вещь - SQLBilder. Если не знаешь SQL как хотелось бы, то, иногда, помогает.


 
Merlot ©   (2003-04-23 13:45) [19]

Выдало тотже результат что и с объединением...
А можно сделать сначало выборку в main3 по полю main1, а потом объеденить с s_kod?


 
Соловьев ©   (2003-04-23 13:48) [20]

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 14:35) [21]

Не получается :))))
Посоветуйте как мне таблице переделать. Такая ситуация:
допустим есть таблица - tablica1 в которой забиты организации с различными данными: инн, адрес, название и т.д.
есть еще таблица - tablica2 в которой забиты различные коды. В организацях по этим кодам есть какие то данные (не повсем кодам, а выборочно. Допустим кодов всего 50-60, а данных в организациях всего по 5-10 кодам, а остальные пустые).
Так вот надо в третью таблицe - tablica3 по каждой организации эти данные по кодам разнести. Не могу же я тащить каждый раз все 50-60 кодов, это у меня база каких размеров будет, вот мне и надо в tablica3 копировать только не пустые коды, и опять же тащить полную структуру кодов или же только ссылки на них? И вот какя еще проблема в tablica3 кроме организайии есть еще полей 20 с другими данными. Если использовть четвертую таблицы - tablica4 (только для кодов из tablica2 и ссылок на tablica3), то я не могу вытащить из нее данные которые мне нужны. Такая проблема...:))))


 
ЮЮ ©   (2003-04-24 04:22) [22]

В чем проблема - то

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



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

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

Наверх




Память: 0.52 MB
Время: 0.013 c
3-46648
Doomalka
2003-04-24 15:14
2003.05.15
Blob


3-46622
Term
2003-04-23 10:17
2003.05.15
QuickReport, как сделать вертикальную надпись


3-46640
softmaster
2003-04-15 23:03
2003.05.15
логический тип


14-46950
sucer
2003-04-25 17:09
2003.05.15
А почему бы этом сайте не разместить серийники для всех версий


1-46818
AndrX
2003-05-02 19:37
2003.05.15
String