Голосование за лучший ответ
Miku Hatsune
Мудрец
(11188)
5 лет назад
Увы, объединять значения двух таблиц силами SQL невозможно. Лучше сделай два отдельных запроса
SELECT * FROM withdraw WHERE iduser = 1
SELECT * FROM transfer WHERE iduser = 1
объедини и обработай их уже на стороне клиента.
Дед Мазай
Гений
(58109)
5 лет назад
select *
from
(
select id, text, iduser, time from withdraw where iduser = 1
union all
select id, text, iduser, time from transfer where iduser = 1
)
order by time
Условие iduser = 1 можно вынести во внешний запрос, если это не ухудшит производительность. Хорошая СУБД оптимизирует запрос одинаково в обоих случаях.
Без подзапроса тоже работает (возможно не на всех СУБД)
select id, text, iduser, time from withdraw where iduser = 1
union all
select id, text, iduser, time from transfer where iduser = 1
order by time
MarvinЗнаток (320)
5 лет назад
Как раз таки с подзапросом и не сработало в Mysql. А вот без - работает.
Максим
Оракул
(92273)
5 лет назад
Ну, с двумя селектами уже написали)
Но можно сделать и с одним))
...
SELECT NVL(w.id, t.id) as id
, NVL(w.text, t.text) as text
, NVL(w.iduser, t.iduser) as iduser
, NVL(w.time, t.time) as time
FROM withdraw w
FULL JOIN transfer t ON 1<>1
WHERE w.id = 1
...
Это для Oracle, а для ms sql, вместо функции nvl(), можно использовать isnull()
Дед МазайГений (58109)
5 лет назад
Вместо nvl есть стандартная функция coalesce, в том числе в Оракле. coalesce мощнее, чем nvl.
Ну и зачем так делать? На мой взгляд, это говнокод. И ошибка в условии WHERE.
Структура таблицы withdraw: id,text,iduser,time
Структура таблицы transfer: id,text,iduser;time
Необходимо вывести все записи из обоих таблиц где iduser = 1 и отсортировать их по time (unixtime).
Хелп плиз)