首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拥有多个车主的MySQL汽车

拥有多个车主的MySQL汽车
EN

Database Administration用户
提问于 2014-04-28 19:49:49
回答 1查看 1.5K关注 0票数 4

我有一个复杂的SQL问题。我们正在建立一个租车系统。我们有一张汽车模型表,一张车主表和一张link_model_owner表。此外,我们的预订被放在另一张桌子上。

该计划如下:

现在,我需要一个查询来搜索所有可用的某种型号的汽车。我尝试了以下查询。但是,如果将一个linkId添加到预订数据库,并且那里的startDate和endDate为空,则此查询将提供多个结果。

我只想有一个唯一可用的链接is的列表,在那里汽车是不租出去的(现在()在startDate和endDate之间)。

请记住,预订数据库预计将增长1000's一天。

代码语言:javascript
复制
SELECT link_model_owner.id,
        owners.fullName
FROM link_model_owner
LEFT JOIN bookings ON link_book_user.id = bookings.bookLinkId
INNER JOIN owners ON link_book_user.userId = owners.id
WHERE link_model_owner.isActive = '1'
  AND link_model_owner.modelid = '252'
  AND COALESCE(NOW() NOT BETWEEN bookings.startDate AND bookings.endDate, TRUE);
EN

回答 1

Database Administration用户

发布于 2014-04-30 07:36:09

您想要使用所有表,特别是link_book_user,这还不太清楚,但我关注的是您的主要问题,考虑到startTime和endTime可能为null,您希望获得所有目前未被预订的汽车。

在下面的查询建议中,我过滤了已经在联接中链接的日期上的预订,然后查询就变得更容易构建了。如果预订的日期为空值,汽车将被视为免费的。

代码语言:javascript
复制
SELECT link_model_owner.id, 
        owners.fullName
FROM link_model_owner
LEFT JOIN bookings ON (link_model_owner.id = bookings.linkId 
                        AND bookings.startDate <= now() 
                        AND bookings.endDate >= now())
INNER JOIN owners ON owners.id = link_model_owner.ownerId
WHERE bookings.id IS null;

注意:在startDate和endDate上有索引是很重要的,因为您的数据库将增长相当多(正如您所写的)。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/64104

复制
相关文章

相似问题

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