2016-10-11 65 views
1

我有A,B,C和D.SQLite的:如何與SQL結合的順序限制左連接查詢

我SQL1 SELECT * FROM main_table order by main_table.date desc limit 2回報A和B.

的記錄

我SQL2 SELECT * FROM main_table left join sub_table using (key) where sub_table._id is not null返回B和C.

我想有一個返回A,B和C基本上,我想加入SQL1或SQL2

我怎麼能結合這兩SQLS(SQLite中)單個SQL語句optimall ÿ?

我的數據是如下

main_table 
_id date  key 
1 2016-08-04 D 
2 2016-10-06 A 
3 2016-09-04 B 
4 2016-07-05 C 

sub_table 
_id age key 
1 8 B 
2 9 C 

慾望輸出

m._id m.date  m.key s._id s.age s.key 
2  2016-10-06 A 
3  2016-09-04 B  1  8  B 
4  2016-07-05 C  2  9  C 

我的選擇的邏輯......我要挑前兩名最新數據,以及數據也有一個時代。其他人我不在乎(即D不在前2,並且沒有年齡)。

+0

請提供一些示例數據和您所需的輸出。 (請參閱[如何 格式化SQL堆棧溢出 post?](http://meta.stackexchange.com/q/96125)如何添加一些。) –

回答

1

如果我讀正確,那麼UNION可能是什麼你心裏有:

SELECT * FROM 
    (SELECT * FROM main_table LEFT JOIN sub_table USING (key) 
    ORDER BY date DESC LIMIT 2) 
UNION 
    SELECT * FROM main_table LEFT JOIN sub_table USING (key) 
    WHERE sub_table._id IS NOT NULL 
+0

我無法移動ORDER BY外部,因爲如果我的初始LIMIT 2與ORDER BY DATE LIMIT 2 – Elye

+0

不一樣,那麼結果會不同。發佈您的預期輸出(真實數據本身)。我們應該能夠給你一個查詢。 SQL表代表無序集,因此在UNION的子查詢中執行的任何排序都不會「粘」在整個查詢中。 –

+0

@Elye不,我需要看到所需的_output_。 –