Вот некоторые сумасшедшие проблемы, с которыми я сражаюсь в течение очень долгого времени: у меня есть две таблицы с одинаковой структурой, допустим, что они are dogs_table
и cats_table
dogs_table:
-id
-dog_posts
-dog_date
cats_table:
-id
-cat_posts
-cat_date
Я хотел бы создать временную шкалу из dog_posts
и cat_posts
, аналогичную этой:
dog_posts
должны идти влево и cat_posts
вправо, но они должны быть объединены как одна таблица, упорядоченная по дате времени каждого из них. (В любом случае временная шкала подавляется). До сих пор я пытался использовать UNION
как это:
SELECT cat_posts as posts, cat_date as date, 'cats' as type from cats_table
UNION
SELECT dog_posts as posts, dog_date as date, 'dogs' as type from dogs_table
ORDER BY date desc
Но эти или подобные UNION
пути абсолютно не работают на меня, потому что делают как собак, так и кошек, как один, и мне нужно иметь возможность выводить row
либо с помощью dog_posts, либо cat_posts. Итак, мне интересно, есть ли какой-то лучший способ, чем использовать UNION
или, возможно, есть способ достичь этого результата с UNION
, но я просто не знаю правильного синтаксиса. И я не знаю, как использовать JOIN
тоже... Итак, любая помощь будет высоко оценена, спасибо всем за внимание.
Альтернативный способ того, что я написал в комментариях, - это полное внешнее соединение. Обычно я не использую полные внешние соединения, но когда я это делаю, я использую следующий метод: выберите все различные значения из столбцов объединения обеих таблиц (которые в вашем случае являются dog_date
и cat_date
). Используйте его в подзапросе и левые соединяйте две таблицы в этих столбцах.
select dogs.dog_post, dates.date, cats.cat_post
from (
select dog_date as date from dogs_table
union
select cat_date as date from cats_table
) dates
left join dogs_table dogs on dogs.dog_date = dates.date
left join cats_table cats on cats.cat_date = dates.date
order by dates.date
Однако - я не знаю, что вы собираетесь делать, если несколько строк имеют одну и ту же дату.
users
? В этой таблице нетtime
рядов, но я бы хотел выбрать идентификатор, имя пользователя или другое. Какой будет синтаксис тогда?