2014-10-03 56 views
0

table1.created_at BETWEEN'2014-10-02 00:00:00 UTC'和'2014-10- 02 23:59:59 UTC」 AND table2.created_at BETWEEN '2014年10月2日00:00:00 UTC' 及 '2014年10月2日23:59:59 UTC'SQL:取第一個匹配,或第二個,如果第一個爲空,或兩者都存在(PostgreSQL)

我有一些加入和另一個查詢,但這對我來說很有趣。

所以,如果我在第一個表的範圍內有一些記錄 - 我應該把它。 如果在第一個和第二個值都來自兩個。 如果僅次於 - 從第二。

現在,如果其中一個表是空的 - 我有空結果。 如果我將使用或 - 我將只有一個表中的記錄,以及。

我該如何重寫查詢以獲得預期的結果?

+0

PostgreSQL。更新標籤,thx – TiSer 2014-10-03 14:52:56

+2

更改將條件從'和'連接到'或'的邏輯。 – 2014-10-03 14:54:42

回答

1

我建議你把你的查詢分成兩個單獨的查詢,一個測試table1日期,另一個測試table2日期。然後你可以使用UNION ALL來合併它們,這應該產生你所要求的行爲。

樣品:

SELECT t1.Data1, ... 
FROM Table1 t1 
    INNER JOIN Table2 t2 ON ... 
WHERE t1.Created_at BETWEEN '2014-10-02 00:00:00 UTC' AND '2014-10-02 23:59:59 UTC' 
UNION ALL 
SELECT t1.Data1, ... 
FROM Table1 t1 
    INNER JOIN Table2 t2 ON ... 
WHERE t2.Created_at BETWEEN '2014-10-02 00:00:00 UTC' AND '2014-10-02 23:59:59 UTC' 

編輯

根據你的榜樣,我會做這樣的事情:

SELECT COUNT(*) AS count_all, 
    users.id AS users_id 
FROM 
(
    SELECT users.id 
    FROM "users" 
     LEFT JOIN table1 ON table1.col1_id = cols1.id 
     LEFT JOIN table2 ON table2.col2_id = cols2.id 
    WHERE "users"."role_id" IN (1,2,4,5,6,7,8) 
     AND table1.created_at BETWEEN '2014-09-27 00:00:00 UTC' AND '2014-10-03 23:59:59 UTC' 
    UNION ALL 
    SELECT users.id 
    FROM "users" 
     LEFT JOIN table1 ON table1.col1_id = cols1.id 
     LEFT JOIN table2 ON table2.col2_id = cols2.id 
    WHERE "users"."role_id" IN (1,2,4,5,6,7,8) 
     AND table2.created_at BETWEEN '2014-09-27 00:00:00 UTC' AND '2014-10-03 23:59:59 UTC' 
) 
GROUP BY users.id 
+0

我已經在我的示例中添加了pastie,請根據它應用您的UNION ALL示例: http://pastie.org/private/gnexgxuqih2tzxn0ja2a – TiSer 2014-10-03 15:02:13

+0

根據看起來您想要的內容,這應該做到這一點。 – mwigdahl 2014-10-03 15:42:30

0

試試這個:

SELECT * 
    FROM table1 
WHERE table1.created_at BETWEEN '2014-10-02 00:00:00 UTC' AND '2014-10-02 23:59:59 UTC' 

UNION ALL 

SELECT * 
    FROM table2 
WHERE table2.created_at BETWEEN '2014-10-02 00:00:00 UTC' AND '2014-10-02 23:59:59 UTC' 

確保table1具有相同的列數如表2所示。

+0

我已經添加了我的示例中的pastie,請根據此示例應用您的UNION ALL示例: http://pastie.org/private/gnexgxuqih2tzxn0ja2a – TiSer 2014-10-03 15:02:51

+0

什麼是cols1和cols2,那裏沒有這樣的別名? – zaratustra 2014-10-03 15:06:06

+0

它只是表中的另一列 – TiSer 2014-10-03 15:06:48

相關問題