首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确连接2个表

正确连接2个表
EN

Stack Overflow用户
提问于 2013-10-23 20:16:30
回答 4查看 50关注 0票数 1

我在一张桌子上有一张办公室清单,还有一张每个办公室都有短期租约的清单。

我试图查询这两个表,以显示所有办公室的列表,以及已预订的最早租约和最后一次租约,以便在再次可用时使用。

代码语言:javascript
复制
SELECT offices.* ,MIN(lease.date_start), MAX(lease.date_end) FROM offices, lease WHERE lease.office_id = office.id ORDER BY office.id DESC

办公桌:

代码语言:javascript
复制
id        | office_name | office_description 
1         | North York  | Lorem Ipsum
2         | Toronto     | Lorem Ipsum
3         | Richmond    | Lorem Ipsum

租赁表:

代码语言:javascript
复制
id        | office_id   | start_date   | end_date 
1         | 1           | 5            | 8
2         | 1           | 3            | 7 
3         | 2           | 1            | 4 

我想得到的结果是:

代码语言:javascript
复制
office_id=>1, start_date=>3, end_date=>8
office_id=>2, start_date=>1, end_date=>4
office_id=>3, start_date=>NULL, end_date=>NULL

我将如何构造我的查询以获得结果?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-10-23 20:20:26

为了在本例中正确使用MIN()MAX(),您需要使用GROUP BY

代码语言:javascript
复制
SELECT
    office.*
    MIN(lease.start_date),
    MAX(lease.end_date)
FROM office AS office
LEFT JOIN lease AS lease ON (lease.office_id = office.office_id)
GROUP BY office.office_id
ORDER BY office.office_id DESC
票数 2
EN

Stack Overflow用户

发布于 2013-10-23 20:21:07

代码语言:javascript
复制
SELECT CONCAT("office_id=>",O.id,", start_dt=>",B.start_dt,", end_dt=>",B.end_dt)
FROM
office O,
(
 SELECT L.office_id,MIN(start_dt) AS start_dt,MAX(end_dt) AS end_dt
 FROM Lease L
 GROUP BY L.office_id
) B
WHERE O.id = B.office_id;
票数 0
EN

Stack Overflow用户

发布于 2013-10-23 20:26:58

下面的选择应该会给出所需的结果:

代码语言:javascript
复制
SELECT o.*, min(l.date_start), max(l.date_end)  
FROM offices o
LEFT JOIN lease l on (
   l.office_id = o.id
)
GROUP BY o.id
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19551461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档