在左右联合联接表中按日期排序

时间:2013-07-22 17:23:26

标签: sql sorting join

我有2张表,有大量相同的数据(适用于制作2种语言的商务卡)。

JOIN(据我所知模仿FULL OUTER加入,做LEFT UNION RIGHT JOIN)他们并排显示数据以便于复制。

table a has data in language1
table b has data in language2

并非每个人都同时拥有language1和language2数据,所以只有language1或者只有language2。

我这样做一个查询:

SELECT
<long list of selected rows from table a and table b as afiled,bfield>
FROM tablelanguage1 a 
LEFT JOIN tablelanguage2 b
ON a.email=b.email
UNION
SELECT<long list of selected rows from table a and table b as afiled,bfield>
FROM tablelanguage1 a 
RIGHT JOIN tablelanguage2 b
ON b.email = a.email
ORDER BY adatetime DESC, bdatetime DESC

这显示了我需要的所有内容,但我在排序方面遇到了麻烦:它显示了除language2-only entries correctly之外的所有内容。仅限语言2(表b)条目始终为最后一个,即使日期晚于某些language1+language2language1-only个条目。

有关如何在这种情况下正确编码ORDER BY的任何建议?非常感谢!

1 个答案:

答案 0 :(得分:0)

您可以使用COALESCE()函数修复此问题:

ORDER BY COALESCE(adatetime,bdatetime) DESC

COALESCE()返回集合中的第一个非NULL值。您获得的结果很有意义,因为对于所有那些“仅限语言2”的记录,adatetimeNULLORDER BY中的多个字段被视为层次结构,因此所有这些NULL值都会被排序在一起,然后它会考虑bdatetime值。 COALESCE()将按照填充的日期排序所有记录,而不是第一个,然后是另一个。