Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выборка из двух таблиц, объединить данных двух разных таблиц 
:(
    Опции темы
Atum
Дата 17.10.2012, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 3.10.2008

Репутация: нет
Всего: нет



Есть таблица tab1  и tab2 
 первая с полями id   count datetime
вторая с аналогичными ... они не связаны между собой. 

Нужно сформировать выборку из этих двух таблиц следующим образом : все записи из первой таблицы за сегодняшний день и все записи из второй таблицы за сегодняшний день 

Дата tab1.count tab2.count
PM MAIL   Вверх
Akina
Дата 17.10.2012, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Это невозможно - нет критерия. по которому в одной записи выходного набора будут объединены конкретные записи исходных наборов.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Atum
Дата 17.10.2012, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 3.10.2008

Репутация: нет
Всего: нет



странно ... мне на первый взгляд казалось что это возможно ....

просто если в первой таблице есть записи 
(пусть дата в формате год месяц день )

1 100 2012-10-10 14:45
2 210 2012-10-10 15:40
3 400 2012-11-10 12:45
4 300 2012-12-10 14:45


а во второй

1 330 2012-10-10 11:15
2 110 2012-11-10 11:40
3 420 2012-11-10 10:42

то за 2012-10-10  мы получим такую выборку : 
1 330 2012-10-10 11:15
2 100 2012-10-10 14:45
3 210 2012-10-10 15:40

т.е по дате 


Это сообщение отредактировал(а) Atum - 17.10.2012, 21:57
PM MAIL   Вверх
Akina
Дата 18.10.2012, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



А теперь посмотрите на первый и на второй посты. Две совершенно разные задачи!
Вторая решается запросто:
Код

SELECT id, count, datetime
FROM table1
WHERE DATE(datetime)=DATE()
UNION
SELECT id, count, datetime
FROM table2
WHERE DATE(datetime)=DATE()
ORDER BY datetime ASC

Как правильно выполнить квотирование кривых имён полей, функции выделения даты из датетайм и правильное задание сортировки выходного набора - это уже зависит от СУБД.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Atum
Дата 18.10.2012, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 3.10.2008

Репутация: нет
Всего: нет



А можно попробовать получить такой вид 
три колонки 
Дата |Значение  count из первой таблицы |  Значение count из второй таблицы

2012-10-10 11:15 | null  | 330
2012-10-10 14:45 |100  | null
2012-10-10 15:40 |200  | null

PM MAIL   Вверх
Akina
Дата 18.10.2012, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Можно. Тоже совершенно тривиальная задача.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Atum
Дата 20.10.2012, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 3.10.2008

Репутация: нет
Всего: нет



Цитата(Akina @ 18.10.2012,  20:20)
Можно. Тоже совершенно тривиальная задача.

Вопрос как ?
PM MAIL   Вверх
Akina
Дата 20.10.2012, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Подзапросом собрать все даты с обеих таблиц. К нему привязать справа обе таблицы. Даты брать из подзапроса, значения из таблиц.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 22.10.2012, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Akina @  20.10.2012,  22:57 Найти цитируемый пост)
Подзапросом собрать все даты с обеих таблиц. К нему привязать справа обе таблицы. 

зачем? Union all и баста. Возможно сверху группировочку, если надо

Код

select date, val as val1, null as val2 from table1
union all
select date, null as val1, val as val2 from table2


В верхнем запросе, возможно, придется привести null к типу данных val второго запроса - cast(null as integer), если val2 имеет тип integer

Это сообщение отредактировал(а) Zloxa - 22.10.2012, 08:52


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 22.10.2012, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(Zloxa @  22.10.2012,  09:52 Найти цитируемый пост)
Union all и баста.

Я предположил, что в двух таблицах может встретиться одинаковое время. и в этом случае оба поля должны быть не-null.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 22.10.2012, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Akina @  22.10.2012,  10:04 Найти цитируемый пост)
Я предположил, что в двух таблицах может встретиться одинаковое время. и в этом случае оба поля должны быть не-null. 

группировка сверху. Это будет производительней чем фуллаутер или же его альтернативные написания.
К тому же с фуллаутером, если дата в исходных наборах не уникальна, будем иметь кроссджойн подтягиваемых значений по датам, заманаемся аггрегировать, чтоб не исказиться.

Добавлено через 3 минуты и 50 секунд
я так понимаю что подтягиваемое значение у нас - количество, потому применяю аггреат - сумму
Код

select date,sum(val1) val1, sum(val2) val2
from (
  select date, val as val1, null as val2 from table1
  union all
  select date, null as val1, val as val2 from table2
)
group by date


Это сообщение отредактировал(а) Zloxa - 22.10.2012, 11:06


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Atum
Дата 24.10.2012, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 3.10.2008

Репутация: нет
Всего: нет



огромное спасибо -  скорее первый вариант - т.к это некая модель кошелька ... две таблицы - в одной деньги пришли в другой ушли ...

нужно формировать вывод приход - расход по дням.
PM MAIL   Вверх
Akina
Дата 24.10.2012, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(Atum @  24.10.2012,  15:30 Найти цитируемый пост)
две таблицы - в одной деньги пришли в другой ушли ...

а почему две, а не одна? сущность-то одна - операция с деньгами...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Atum
Дата 25.11.2012, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 3.10.2008

Репутация: нет
Всего: нет



Цитата(Akina @ 24.10.2012,  14:36)
Цитата(Atum @  24.10.2012,  15:30 Найти цитируемый пост)
две таблицы - в одной деньги пришли в другой ушли ...

а почему две, а не одна? сущность-то одна - операция с деньгами...

чтобы можно было независимо - в одну добавили в другую добавили - нет конфликтов - никто ничего не ждет ... 

в банках так делают наверное smile

а вот отчет формировать - это операция не высокого приоритета - можно и объединить .
PM MAIL   Вверх
Akina
Дата 25.11.2012, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(Atum @  25.11.2012,  20:21 Найти цитируемый пост)
чтобы можно было независимо - в одну добавили в другую добавили - нет конфликтов - никто ничего не ждет ... 

Мне это кажется неубедительным.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0694 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.