|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
27.04.2012, 17:33 | #1 |
Новичок
Джуниор
Регистрация: 27.04.2012
Сообщений: 5
|
как правильно объеденить таблицы?
подскажите может кто сталкивался
есть две таблицы таблица1 ПОЛЕ1:Текстовое значение ПОЛЕ2:Численное значение Таблица2 ПОЛЕ1:Текстовое значение ПОЛЕ2:Численное значение Примерно выглядит так ТАБЛИЦА 1 ТАБЛИЦА 2 ПОЛЕ1 ПОЛЕ2 ПОЛЕ1 ПОЛЕ2 запись1 4 запись5 4 запись2 4 запись6 7 запись3 5 запись8 19 как должен выглядеть SQL запрос чтоб получилось так РЕЗУЛЬТАТ ЗАПРОСА ПОЛЕ1.ТАБЛИЦА1 | ПОЛЕ1.ТАБЛИЦА2 запись1 | запись5 запись2 | т.е. вывести в результирующую таблицу записи поля записей таблиц, ПОЛЕ2 для которых имеет одинаковое значение (в примере=4) пробовал left join и т.д. не получается |
27.04.2012, 17:44 | #2 |
Форумчанин
Регистрация: 26.03.2012
Сообщений: 665
|
А почему запись2 без запись5 ?
|
28.04.2012, 08:39 | #3 |
Новичок
Джуниор
Регистрация: 27.04.2012
Сообщений: 5
|
Ну в том и вопрос чтоб приставить рядом колонки из таблиц разных. запись2 никак не должна быть с записью5. в ТАБЛИЦЕ2, Поле2 имеет одну запись со значением 4 значит стольно записей и в результирующей таблице остальные имеют пустое значение.
|
28.04.2012, 08:52 | #4 |
Форумчанин
Регистрация: 26.03.2012
Сообщений: 665
|
Ну хорошо, а почему запись5 с запись1 а не с запись2? они обе с 4, а значит равнозначны, нужен доп. критерий указывающий что именно запись1 с запись5 а не запись2.
И субд надо бы указать. |
28.04.2012, 09:05 | #5 |
Новичок
Джуниор
Регистрация: 27.04.2012
Сообщений: 5
|
критерий - первая на очереди в списке. они вообще никак не связаны это колонки с разных таблиц... ну я как бы переформулирую... это вот так представьте себе - отфильтровали ТАБЛИЦУ1 по полю2=4, отфильтровали ТАБЛИЦУ2 по полю2=4 и просто приставили колонки друг к другу... Допустим в делфи я бы взял StringGrid1 и в 1ю колонку вывел бы результат SELECT ... FROM ТАБЛИЦА1... where ПОЛЕ2=4, во вторую колонку STRINGGrida вывел бы SELECT ... FROM ТАБЛИЦА2... where ПОЛЕ2=4, если б строк не хватало добавил бы просто - в какой табличке больше б записей было б такой высоты б и был бы StringGrid. Я вот просто подумал ну по логике должна ж быть в SQL какаято конструкция позволяющая єто сделать в SQL именно... или никак?
Последний раз редактировалось TRoman; 28.04.2012 в 11:41. |
28.04.2012, 09:24 | #6 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
идея у вас изначально порочная (точнее, не имеющая никакого отношения к реляционным БД, которые, собственно, и обрабатывает SQL). Поэтому, хорошее решение (универсальное) Вы вряд ли найдёте, а вот извращённое можно попытаться сочинить... например, добавить в запросы получение RecNo (rownumber, rownum и т.п.) и объединять таблицы по этому номеру. только учтите, что при этом нужно знать, в какой таблице будет заведомо больше записей (какую таблицу ставить слева в LEFT JOIN), иначе все "лишние" строчки в запрос не попадут. |
|
28.04.2012, 09:44 | #7 | |
Новичок
Джуниор
Регистрация: 27.04.2012
Сообщений: 5
|
Цитата:
добавте ,ТАБЛИЦУ 3 которая будет иметь поле ID (уникальное) на которое и ссылаются ПОЛЯ2 в ТАБЛИЦЕ1 и 2. и вот вам реляционность ТАБЛИЦА1 реляционна по отношению к ТАБЛИЦЕ3, ТАБЛИЦА2 реляционна к ТАБЛИЦЕ3. только ТАБЛИЦА2 никак не реляционна к ТАБЛИЦЕ1 именно ввиду такого взаимоотношения таблиц я и пытаюсь решить задачу методами SQL и потому и предположил что должно содержать конструкцию выполняющую такой запрос, когда две или более таблиц реляционны к третьей но нереляционны между собой |
|
28.04.2012, 11:26 | #8 | |||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Цитата:
Цитата:
или же в ЭТОМ! Цитата:
либо ее нет. P.S. а для вашего модифицированного варианта. даже без использования table3. выведет сначала все общие , потом оставшиеся t1, еще потом оставшиеся t2 Код:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 28.04.2012 в 11:56. |
|||
28.04.2012, 11:40 | #9 |
Новичок
Джуниор
Регистрация: 27.04.2012
Сообщений: 5
|
честно вообще не понял что вы пытались сейчас уточнить
в первоначальном примере запись1 и запись2 из таблицы1 имела занчение поле2=4 как и запись5 из таблицы2 имела поле2=4 ну может первоначальный пример имел недосказанность некоторую давайте считать что поле2 в обеих таблицах реф. ссылка на ID из таблицы3. хотя результат ожидаемый от запроса в первоначальном примере в общем полагал наличие параметра определяющего значение поля2=4 тем и объясняется пример со стринггридом))) пусть тогда реляционны к внешнему параметру но нереляционны между собой какая разница аргумент реляционности в общем, на мой взгляд, был ясен из первоначального примера. короче если кто знает как это решить конструкцией SELECT FROM то буду признателен |
28.04.2012, 11:46 | #10 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
В MS SQL, например, такую выборку можно сделать, но в хранимой процедуре или кучей команд, с использованием курсоров и временных таблиц. Одним селектом никак
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как правильно спроектировать таблицы будущей БД | Newbabe | БД в Delphi | 2 | 22.04.2011 12:32 |
DB Access - как правильно создать бд и связать таблицы? | XerSon | БД в Delphi | 5 | 19.04.2011 11:41 |
Фреймы как объеденить в один??? | p1nk | HTML и CSS | 3 | 05.03.2010 16:19 |
Selection - как объеденить??? | Sensygirl | Microsoft Office Excel | 8 | 05.10.2009 18:03 |
Как правильно получить координаты по клику на ячейку таблицы? | Stilet | JavaScript, Ajax | 3 | 26.08.2009 16:19 |