1

次の構造の3つのテーブルがあります。

tb1: id(AI, PK), uid, date, text
tb2: id(AI, PK), uid, date, text ... and so on

各テーブルに追加のunqiueデータがあるため、これらを別々に保持する必要があります。マージして、3つのテーブルすべてから最後の20エントリ(つまり、date DESC)(具体的には、が必要)を取得するクエリを実行したいと思います(これが1つの大きなテーブルであるかのように)。uidtext

どうすればこれを行うことができますか?

4

1 に答える 1

0
SELECT  *
FROM    (
        SELECT  uid, text
        FROM    tb1
        ORDER BY
                date DESC
        LIMIT 20
        ) q
UNION ALL
SELECT  *
FROM    (
        SELECT  uid, text
        FROM    tb2
        ORDER BY
                date DESC
        LIMIT 20
        ) q2
UNION ALL
        (
        SELECT  uid, text
        FROM    tb3
        ORDER BY
                date DESC
        LIMIT 20
        ) q3
ORDER BY
        date DESC
LIMIT 20

これは単なるよりも効率的ですUNION ALL

パフォーマンスの比較については、私のブログのこの記事を参照してください。

于 2009-08-10T16:53:09.550 に答える