1

ユニオンを使用して、日付順 (新しい順) にさまざまなテーブルから項目を選択しようとしています。

次のテーブルがあるとします

events
eventsID  | eventsTitle      | eventsTimestamp  |  eventsLocation
 1          event title         2012/08/23            1
 2          event title 2       2012/08/15            1


posts
postsID | postsSubject | postsTimestamp | postsCategory
 1          post title     2012/08/20         1

したがって、出力は

title           timestamp
event Title       2012/08/23 
post title        2012/08/20
event title 2     2012/08/15

これが私がやろうとしていることですが、注文からエラーが発生します

SELECT posts.postsID, posts.postsSubject FROM posts where posts.postsCategory = 1 ORDER BY posts.postsTimestamp DESC
UNION
SELECT events.eventsID, events.eventsTitle FROM events where events.eventsLocation = 1 ORDER BY events.eventsTimestamp DESC
4

3 に答える 3

2

UNION構文で述べたように:

ORDER BYorLIMIT句を使用して結果全体をソートまたは制限するには、個々のステートメントをUNION括弧で囲み、最後のステートメントの後にorを配置します。次の例では、両方の句を使用しています。 SELECTORDER BYLIMIT

(SELECT a FROM t1 WHERE a=10 AND B=1)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2)
ORDER BY a LIMIT 10;

したがって:

 (SELECT postsSubject AS title, postsTimestamp AS timestamp
  FROM   posts
  WHERE  postsCategory = 1)

UNION ALL

 (SELECT eventsTitle, eventsTimestamp
  FROM   events
  WHERE  eventsLocation = 1)

ORDER BY timestamp DESC

sqlfiddleで参照してください。

于 2012-08-27T01:30:08.377 に答える
1

これを試して、

SELECT Title, `TimeStamp`
(
    SELECT  posts.postsID as ID, 
            posts.postsSubject as Title, 
            eventsTimestamp as `TimeStamp`
    FROM    posts 
    where   posts.postsCategory = 1 
    UNION
    SELECT  events.eventsID as ID, 
            events.eventsTitle as Title, 
            postsTimestamp as `TimeStamp`
    FROM    events 
    where   events.eventsLocation = 1 
) x
ORDER BY `TimeStamp` DESC
于 2012-08-27T01:23:43.867 に答える
1

ORDER BY最後に、2 つの結合された Select の後に1 つの句のみが必要です。

SELECT postsID          AS id, 
       postsSubject     AS title, 
       postsTimestamp   AS timestamp
FROM posts 
WHERE postsCategory = 1 

UNION

SELECT eventsID, 
       eventsTitle, 
       eventsTimestamp 
FROM events 
WHERE eventsLocation = 1 

ORDER BY timestamp DESC ;
于 2012-08-27T01:24:28.657 に答える