执行SQL查询,然后加入

时间:2015-05-19 18:35:42

标签: sql sqlite left-join

假设我有两张桌子:

  • 具有列[id,date,userid] userid的票证是引用user.id
  • 的外键
  • 具有列[id,name]
  • 的用户

由于我真的很大,我想先按日期过滤门票表

SELECT id FROM ticket WHERE date >= 'some date'

然后我想与用户表进行左连接。有没有办法做到这一点。我尝试了以下但它不起作用。

 select ticket.id, user.name from ticket where ticket.date >= '2015-05-18' left join user on ticket.userid=user.id;

道歉,如果这是一个愚蠢的问题。我在谷歌上搜索过,但大多数答案都涉及加入后的子查询,而不是我想要的是先查询,然后为返回的项目进行连接

为了使事情更清楚一点,我面临的问题是我有大表并且加入需要时间。我正在加入3个表,查询花了将近3秒钟。什么是减少时间的最佳方法。我认为我应该首先选择一个小子集,然后加入。

,而不是加入然后再做where子句

1 个答案:

答案 0 :(得分:1)

简单地按顺序排列所有内容:

select - from - where - group by - having - order by

select ticket.id, user.name 
from ticket left join user on ticket.user_id=user.id
where ticket.date >= '2015-05-18'

或者将其放在派生表中:

select ticket.id, user.name 
from
 (
   select * from ticket
   where ticket.date >= '2015-05-18'
 ) as ticket 
left join user on ticket.user_id=user.id