2016-10-11 70 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_。 –