1

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

例子

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 中组合数据,则会出现某些问题,例如分页以及即使它们不是最新的,也必须选择每个查询的固定数量。

4

3 回答 3

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 中,order by 始终适用于完整结果,而不是单个部分。因此,即使它是在第二次选择之后放置的,它也会对所有内容进行排序。

使用实现分页LIMIT

于 2013-09-02T22:53:33.750 回答
1
SELECT Field1, Field2, Field3, date_posted
FROM Table1
UNION
SELECT Field4, Field5, date_posted
FROM Table2
ORDER BY date_posted LIMIT 20
于 2013-09-02T22:54:00.997 回答
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

于 2013-09-02T22:54:14.817 回答