SQL连接表没有公共字段

时间:2013-09-02 22:48:58

标签: mysql sql database

我希望将两个不相关的表连接到一个表中,这样我就可以按公共字段排序并限制组合结果集显示在页面上。

实施例

Table 1
Field1 | Field2 | Field3 | date_posted
--------------------------------------
Blah   | Blah2  | Blah3  | 2013-02-01 


Table 2
Field4 | Field 5 | date_posted
------------------------------
Blah4  | Blah5   | 2013-01-01 


Result
Field1 | Field2 | Field3 | Field4 | Field5 | date_posted
--------------------------------------------------------
Blah   | Blah2  | Blah3  | NULL   | NULL   | 2013-02-01
NULL   | NULL   | NULL   | Blah4  | Blah5  | 2013-01-01

原因是我之前已经设置了一个数据库来在不同的页面上显示这些表,现在客户端想要将它们组合成一个页面。如果我单独运行查询然后在php中组合数据,则存在某些问题,例如分页以及必须选择每个的设定数量,即使它们不是最新的。

3 个答案:

答案 0 :(得分:4)

无需加入:

select field1, field2, field3, null as field4, null as field5, date_posted
from table_1
union all
select null,   null,   null,   field4,         field5,         date_posted
from table_2

要按特定列排序,只需添加order by

即可
select field1, field2, field3, null as field4, null as field5, date_posted
from table_1
union all
select null,   null,   null,   field4,         field5,         date_posted
from table_2
order by date_posted

请注意,在UNION中,订单始终适用于完整结果,而不是单个部件。因此,即使它在第二次选择之后立即放置,它也会对所有内容进行排序。

使用LIMIT

实现分页

答案 1 :(得分:1)

SELECT Field1, Field2, Field3, date_posted
FROM Table1
UNION
SELECT Field4, Field5, date_posted
FROM Table2
ORDER BY date_posted LIMIT 20

答案 2 :(得分:1)

试试这个:

select field1, field2, field3, null field4, null field5, date_posted from table1
union all
select null field1, null field2, null field3, field4, field5, date_posted from table2

SQL小提琴:http://sqlfiddle.com/#!2/69a46/1