以下是我正在与很长时间斗争的一些疯狂问题:
我有两个结构相同的表,我们假设它们是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
......所以,任何帮助都将受到高度赞赏,非常感谢大家的关注。
答案 0 :(得分:1)
我在评论中写的另一种方法是完全外部联接。
通常我不使用完全外连接,但是当我这样做时,我使用以下方法:从两个表的连接列中选择所有不同的值(在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
然而 - 如果多行的日期相同,我也不知道你要做什么。