Форум: "Базы";
Текущий архив: 2003.05.15;
Скачать: [xml.tar.bz2];
ВнизОбъединение таблиц. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.009 c