查询两个表 - 但不是尝试加入?

时间:2016-02-08 03:17:13

标签: mysql sql database

我有两张几乎有相同列的表格。第一个表包含"当前"特定记录的状态,第二个表包含该记录的所有先前统计数据(它是历史表)。第二个表与第一个表有一个FK。

我想查询两个表,以便获取整个记录历史记录,包括其在一个结果中的当前状态。我并不认为JOIN是我试图做的事情,因为#34;加入"多个表"水平" (一个表的一个或多个列与另一个表的一个或多个列组合以产生包括来自两个表的列的结果)。相反,我试图"加入"(???)表格"垂直" (意思是,没有列添加到结果中,只是两个表的结果都落在结果集的相同列下)。

不确定我所表达的内容是否有意义 - 或者在MySQL中是否可行。

3 个答案:

答案 0 :(得分:2)

UNION。

Select colA, colB From TblA

UNION

Select colA, colB From TblB

答案 1 :(得分:2)

要完成此操作,您可以在两个UNION语句之间使用SELECT。我还建议以下列方式从派生表中进行选择,以便您可以按结果集中的列进行排序。假设我们想要合并以下两个查询的结果:

SELECT FieldA, FieldB FROM table1;
SELECT FieldX, FieldY FROM table2;

我们可以使用UNION声明加入这些声明,如下所示:

SELECT Field1, Field2 FROM (
    SELECT FieldA AS `Field1`, FieldB AS `Field2` FROM table1 
    UNION SELECT FieldX AS `Field1`, FieldY AS `Field2` FROM table2) 
AS `derived_table` 
ORDER BY Field1 ASC, Field2 DESC

在此示例中,我从table1table2字段中选择了相同但不完全相同的字段,共享相同的数据类型。使用别名匹配它们({em>例如,FieldA table1FieldX table2都映射到结果Field1设置,等。)。

如果每个表具有相同的列名,则不需要字段别名,并且查询变得更简单。

注意:在MySQL中,必须命名派生表,即使不打算使用给定的名称。

答案 2 :(得分:-1)

您在第一张桌子上的左连接之后。这将使得右侧我是一个数字(存在于两者中)或null(仅存在于左表中)

你想要

select lhs.* , rhs.id from lhs left join  rhs using(Id)