Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2018, 09:37   #1
Parallelogram
Недотепа
Форумчанин
 
Регистрация: 18.01.2011
Сообщений: 174
По умолчанию Объединить несколько таблиц, несколько столбцов, вывести имя таблиц

Здравствуйте.

Есть таблицы (table_temp, tBLE_input):

TABLE_TEMP
user_id | time | money | do
1 | 06:00 | 10 | 2
2 | 06:10 | 25 | 0
1 | 06:20 | 30 | 0
2 | 06:22 | 10 | 1
1 | 12:50 | 14 | 1


TABLE_INPUT
user_id | time | money
1 | 08:30 | 11
2 | 10:02 | 33
1 | 13:31 | 77


Нужно вывести только для user_id = '1' в обеих таблицах, и do <> '0' в первой таблице, чтобы получилось в худшем случае так:
time | money | do
06:00 | 10 | 2
08:30 | 11 | null
12:50 | 14 | 1
13:31 | 77 | null

А в лучшем случае, так:

time | money | do | table
06:00 | 10 | 2 | temp
08:30 | 11 | null | input
12:50 | 14 | 1 | temp
13:31 | 77 | null | input

До чего я дошел (у меня конечно же не получилось):
Код:
SELECT 
	t.time,
    t.money,
	t.do 
FROM 
	(SELECT * 
     FROM table_temp 
     WHERE do <> '0' 
     AND user_id = '1') AS t 
LEFT JOIN table_input AS i ON t.user_id = i.user_id
И получилось вот что:
time | money | do
06:00 | 10 | 2
12:50 | 14 | 1
06:00 | 10 | 2
12:50 | 14 | 1

И да, я знаю, что нужно использовать UNION, чтобы объединить одинаковые столбцы из разных таблиц в одну. И я предполагаю, что нужно использовать SHOW TABLES, чтобы вывести имя таблиц, или использовать алиас для присвоения нового имени... но я не понимаю как все это сделать и куда подставлять.
Parallelogram вне форума Ответить с цитированием
Старый 15.06.2018, 09:45   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

используйте union all

Код:
select 
   a.time, a.money, a.do, 'temp' as name_table
from TABLE_TEMP as A
where A.user_id  = '1' and a.do<>'0'
union all
 select   b.time, b.money, null as do, 'input' as name_table
 from TABLE_INPUT as B
 where B.user_id  = '1'
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.06.2018, 09:50   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Код:
SELECT time,money,do,'temp' AS Table
  FROM TABLE_TEMP
  WHERE user_id = '1' AND do <> '0'
UNION ALL
SELECT time,money,null,'input'
  FROM TABLE_INPUT
  WHERE user_id = '1'
ORDER BY 1
add ой, дубль получился, почти ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.06.2018, 10:07   #4
Parallelogram
Недотепа
Форумчанин
 
Регистрация: 18.01.2011
Сообщений: 174
По умолчанию

Спасибо, все получилось. UNION ALL - это то что нужно )
Parallelogram вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос значений таблиц из Excel в несколько таблиц Word средствами VBA apfu00 Microsoft Office Excel 0 19.10.2016 16:51
Несколько таблиц в combobox Maxim5 C# (си шарп) 1 09.04.2016 10:57
Linqdatasource несколько таблиц ZBEP ASP.NET 0 21.05.2014 13:34
Несколько таблиц в Word FearDog Общие вопросы Delphi 1 29.02.2012 21:32
Вставить несколько таблиц lede88 Общие вопросы Delphi 0 07.04.2010 06:52