0

同じデータがたくさんある 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その状況で正しくコーディングする方法について何か提案はありますか? どうもありがとう!

4

1 に答える 1

0

COALESCE()次の関数でこれを修正できます。

ORDER BY COALESCE(adatetime,bdatetime) DESC

COALESCE()セットから最初の非 NULL 値を返します。これらすべての「language2-only」レコードでadatetimeNULL. の複数のフィールドはORDER BY階層として扱われるため、これらのNULL値はすべて一緒に並べ替えられ、bdatetime値が考慮されます。 COALESCE()は、すべてのレコードを、最初の日付から別の日付の順に並べ替えるのではなく、入力された日付で並べ替えます。

于 2013-07-22T17:45:21.460 に答える