Mysql连接2个彼此不相关的表

时间:2018-10-04 09:00:42

标签: mysql

有没有办法连接两个完全不相关的表?

我有2个表,分别名为“ writes”和“ posts” 这些帖子是人们在自己的个人资料上写的消息 这些写信是人们在另一个用户个人资料上写的消息。

在加载用户个人资料时,我想在他们的时间轴上同时写一些他们的帖子和文章。我怎样才能做到这一点?

是否可以将这些表连接在一起?还是我应该制作一个完整的其他系统来加载时间线?

类似

SELECT q1, q2 FROM
(SELECT posts.* as q1 FROM writes as a) t1, 
(SELECT writes.* as q2 FROM posts as b) t2

不是为我工作

然后从帖子中选择*,写给我一个交叉联接表。

表具有以下结构:

帖子:

#1 id int
#2 user_id int
#3 post varchar (4096)
#4 last_changed datetime
#5 posted_at datetame
#6 type varchar (32) (In the post case it is 'POST')

写:

#1 id int
#2 writer_id int (the user_iud who has written it)
#3 user_id int (the user_id of the person this write is written on)
#4 written varchar (the text)
#5 last_changed datetime
#6 written_at datetime
#7 type varchar (32) (in this case it it 'WRITE')

2 个答案:

答案 0 :(得分:0)

您可以使用UNION将“不同选择”查询的结果合并为一个。由于两个Select语句之间没有任何重复,因此可以使用UNION ALL

使其更有效。

此外,要执行overall sorting,您需要将完整的结果集放在Derived table中,并使用Order By子句。您可以分别使用ASCDESC以升序或降序设置。

我们还需要确保两个SELECT语句返回的列数

SELECT dt.id, 
       dt.writer_id, 
       dt.user_id, 
       dt.post, 
       dt.last_changed, 
       dt.posted_at, 
       dt.type 
FROM 
(
 (
  SELECT id, 
         user_id AS writer_id, 
         user_id, 
         post, 
         last_changed, 
         posted_at, 
         type
  FROM posts
 )

  UNION ALL 

 (
  SELECT id, 
         writer_id, 
         user_id, 
         written AS post, 
         last_changed, 
         written_at AS posted_at, 
         type
  FROM writes
 )
) AS dt 
ORDER BY dt.posted_at ASC 

文档详细信息:

  

UNION用于合并来自多个SELECT语句的结果   放入一个结果集。

     

第一个SELECT语句中的列名用作   返回结果的列名称。列出的选定列   每个SELECT语句的对应位置应具有相同的位置   数据类型。 (例如,第一列选择的第一列   语句的类型应与选择的第一列的类型相同   其他陈述。)

     

如果相应的SELECT列的数据类型不匹配,则   UNION结果中列的类型和长度考虑在内   所有SELECT语句检索的值。

答案 1 :(得分:0)

全部使用

select  id ,user_id,post,last_changed,posted_at,type from posts
 union all    
select  id,user_id,written,last_changed,written_at,type from write

所有工会的规则

Each SELECT statement within UNION must have the same number of columns
The columns must also have similar data types
The columns in each SELECT statement must also be in the same order