执行 SQL 查询然后加入
Perform SQL query and then join
假设我有两个 table:
- 包含 [id,date, userid] 列的票据 userid 是引用 user.id
的外键
- 列为 [id,name] 的用户
由于 table 非常大,我想先按日期 table 过滤门票
SELECT id FROM ticket WHERE date >= 'some date'
然后我想与用户 table 进行左连接。有没有办法做到这一点。我尝试了以下方法,但它不起作用。
select ticket.id, user.name from ticket where ticket.date >= '2015-05-18' left join user on ticket.userid=user.id;
抱歉,这是一个愚蠢的问题。我在 google 上搜索过,但大多数答案都涉及连接后的子查询,而不是我想要的,即先执行查询,然后对返回的项目进行连接
为了让事情更清楚一点,我面临的问题是我有很大的 tables 并且加入需要时间。我正在加入 3 tables,查询需要将近 3 秒。减少时间的最佳方法是什么。我想我应该先 select 一小部分然后加入,而不是加入然后执行 where 子句。
只需将所有内容按正确顺序排列即可:
select - 从 - 哪里 - 分组依据 - 有 - 排序
select ticket.id, user.name
from ticket left join user on ticket.user_id=user.id
where ticket.date >= '2015-05-18'
或者把它放在 Derived Table:
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
假设我有两个 table:
- 包含 [id,date, userid] 列的票据 userid 是引用 user.id 的外键
- 列为 [id,name] 的用户
由于 table 非常大,我想先按日期 table 过滤门票
SELECT id FROM ticket WHERE date >= 'some date'
然后我想与用户 table 进行左连接。有没有办法做到这一点。我尝试了以下方法,但它不起作用。
select ticket.id, user.name from ticket where ticket.date >= '2015-05-18' left join user on ticket.userid=user.id;
抱歉,这是一个愚蠢的问题。我在 google 上搜索过,但大多数答案都涉及连接后的子查询,而不是我想要的,即先执行查询,然后对返回的项目进行连接
为了让事情更清楚一点,我面临的问题是我有很大的 tables 并且加入需要时间。我正在加入 3 tables,查询需要将近 3 秒。减少时间的最佳方法是什么。我想我应该先 select 一小部分然后加入,而不是加入然后执行 where 子句。
只需将所有内容按正确顺序排列即可:
select - 从 - 哪里 - 分组依据 - 有 - 排序
select ticket.id, user.name
from ticket left join user on ticket.user_id=user.id
where ticket.date >= '2015-05-18'
或者把它放在 Derived Table:
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