0

私は過去数時間からSqlクエリにかなりこだわっています。次のように 4 つのテーブルから最新のいくつかの要素を取得する必要があります。テーブル名は -- events 、 contactinfo 、 video 、 news です。

イベントとニュースからの最後の 3 つの結果と、ビデオと contactinfo からの最後の 1 つの結果が必要です。

私は次のクエリを試しましたが、期待どおりに機能しませんでした..

SELECT  * FROM 
((SELECT * FROM EVENTS ORDER BY eventid DESC LIMIT 3)EV) INNER JOIN
((SELECT * FROM NEWS ORDER BY newsid DESC LIMIT 3)NE) INNER JOIN
((SELECT * FROM VIDEOS ORDER BY videoid DESC LIMIT 1)VI) INNER JOIN
((SELECT * FROM CONTACTINFO ORDER BY cid DESC LIMIT 1)AB);

実際、私は DB エキスパートではなく、開発者であり、MySql についてあまり知りません。どんな助けでも大歓迎です。

4

3 に答える 3

0

単一のテーブルとして結果が必要な場合は、SELECT と UNION を使用してデータを結合し、各クエリで同じ列番号とそのデータ型を指定します (必要に応じて CAST 列とデフォルト値を指定します)。それ以外の場合、異なる構造の結果が必要な場合は、4 つのクエリを実行します。
JOIN は、あるテーブルの最後の N 行が別のテーブルの最後の N 行内に対応する行を持っている可能性が低いため、タスクには意味がありません。
更新
例を参照してください:

SELECT * FROM 
    (SELECT TOP 5 n.ID, n.Content, n.CreatedOn as CreatedOn, n.UserID as NewsUserID, 1 as SourceType FROM News n ORDER BY n.CreatedOn DESC) t1
UNION ALL
SELECT * FROM 
    (SELECT TOP 5 e.ID, e.Description as Content, e.CreatedAt as CreatedOn, NULL as NewsUserID, 2 as SourceType FROM Events e ORDER BY e.CreatedAt DESC) t2
ORDER BY SourceType, CreatedOn DESC

そこで、すべてのソースから ID、Content、および CreatedOn を取得し、News テーブルから UserID を取得することにしました。同じデータ型の同じ列を返すように、2 つのクエリを作成しました。各クエリは、ソースから最初の 5 行のみを取得します (TOP 5 は MS SQL 構文です。データベースのものを使用してください)。また、エンティティのタイプを保持する追加のフィールド SourceType を追加しました。メイン クエリでは、すべての結果を結合し、最初にソース タイプで並べ替え、次に CreatedDate で並べ替えます。

于 2013-11-10T15:01:07.073 に答える
0

これらのテーブルに同じ列がある場合は、(INNER JOIN の代わりに) UNION を実行できます。そうでない場合は、4 つのクエリを実行することをお勧めします。

JOIN は、結合されたデータが相互に相関していることを示唆しており、そうでない場合は、JOIN シームを実行するよりも間違ったソリューションのようになります。

于 2013-11-10T14:54:53.073 に答える