Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-46804
Max1111
2003-05-02 14:06
2003.05.15
Стандартная форма открытия файла


14-46923
Dim!S
2003-04-25 11:41
2003.05.15
Oracle, MSSQL или FireBird


6-46878
AlexMax
2003-03-19 14:11
2003.05.15
Получение информации о входящем сообщении


14-46919
Vlad Oshin
2003-04-25 09:07
2003.05.15
humor


1-46772
aclon
2003-05-01 14:24
2003.05.15
запись числа десятичной дробью





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский