Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.03.2013, 12:05
BarakudaX777 BarakudaX777 вне форума
Прохожий
 
Регистрация: 16.02.2013
Сообщения: 13
Репутация: 10
По умолчанию ОБЪЕДИНЕНИЕ 2х ЗАПРОСОВ

Нужно объединить два запроса с разным количеством записей.
Объединить так чтобы столбцы объеденились.
Структура
Код:
t1
install_id   napr  mm  kod
     9         12     0    10
     9         12    20   210
     9         12    60   420

t2
install_id   napr  mm  kod
     9         12     0    10
     9         12    20   210

t1 и t2 хранят данные с разных датчиков!
Нужно получить :

Код:
 napr1      mm1   kod1   napr2   mm2   kod2 
  12           0        10      12       0       10
  12          20       210     12      20     210
  12          60       420    null     null    null

Mysql не признает Full Join.
Пробовал писал следующим образом, но почему то запрос выдает всевозможные комбинации.

Код:
SELECT 
a.napr as napr1,a.mm as mm1, a.kod as kod1,b.napr as napr2,b.mm as mm2,b.kod as kod2
FROM
t1 as a  LEFT OUTER t2 as b ON a.install_id=b.install_id
WHERE a.install_id=10

UNION  ALL

SELECT a.napr as napr1,a.mm as mm1, a.kod as kod1,b.napr as napr2,b.mm as mm2,b.kod as kod2
FROM
t1 as a  RIGHT OUTER JOIN t2 as b ON a.install_id=b.install_id
WHERE a.install_id IS NULL
ПОЛУЧАЕТСЯ ДЕКАРТОВО ПРОИЗВЕДЕНИЕ. 6 записей

Как поступить чтоб объединить таблицы???

Последний раз редактировалось BarakudaX777, 03.03.2013 в 12:14.
Ответить с цитированием
  #2  
Старый 04.03.2013, 00:13
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 576
Версия Delphi: 6
Репутация: выкл
По умолчанию

Хотел сначала написать набросок, рассчитывая, что человек, знающий про декартово произведение, полный запрос сможет осилить и сам, но не смог. Написал полный запрос:
Код:
select
  u.install_id, u.napr, t1.mm mm1, t1.kod kod1, t2.mm mm2, t2.kod kod2
from
  (select install_id, napr from t1
   union
   select install_id, napr from t2) u
left join
  t1 on u.install_id = t1.install_id and u.napr = t1.napr
left join
  t2 on u.install_id = t2.install_id and u.napr = t2.napr;
Давно запросы не писал, left/right join мог перепутать.

Возник также вопрос: зачем одинаковые по структуре данные хранить в разных таблицах?
Ответить с цитированием
  #3  
Старый 04.03.2013, 10:01
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Через union запросы объединить можно. Только надо чтобы имена и последовательность полей в обоих выборках были идентичны.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #4  
Старый 04.03.2013, 11:41
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

Код:
SELECT t1.napr, t1.mm, t1.kod, t2.napr, t2.mm, t2.kod
FROM t1
  LEFT JOIN t2 ON t2.install_id = t1.install_id AND t2.kod = t1.kod

Цитата:
Возник также вопрос: зачем одинаковые по структуре данные хранить в разных таблицах?
Абсолютно согласен.
Хранить одни и те же данные в разных таблицах - нелогично. Гораздо правильнее в этой же таблице добавить поле "номер датчика" и по нему идентифицировать нужный датчик.
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз

Последний раз редактировалось Yurk@, 04.03.2013 в 11:44.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:51.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter