我有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+language2
或language1-only
个条目。
有关如何在这种情况下正确编码ORDER BY
的任何建议?非常感谢!
答案 0 :(得分:0)
您可以使用COALESCE()
函数修复此问题:
ORDER BY COALESCE(adatetime,bdatetime) DESC
COALESCE()
返回集合中的第一个非NULL值。您获得的结果很有意义,因为对于所有那些“仅限语言2”的记录,adatetime
为NULL
。 ORDER BY
中的多个字段被视为层次结构,因此所有这些NULL
值都会被排序在一起,然后它会考虑bdatetime
值。 COALESCE()
将按照填充的日期排序所有记录,而不是第一个,然后是另一个。