首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL查询-连接三个表

问MySQL查询-连接三个表
EN

Stack Overflow用户
提问于 2015-12-10 21:38:48
回答 1查看 1K关注 0票数 1

我有三个MySQL表,如下所示:

库存表

代码语言:javascript
复制
  sn    |    hostname
-----------------------
  1234       host123
  2345       host456
  4567       host789
  6789       host910

预约表

代码语言:javascript
复制
  orderid   |    serial    |   start_date    |    end_date    
----------------------------------------------------------
      1           1234         2015-09-10        2015-10-25
      2           2345         2015-10-21        2016-02-01
      2           4567         2015-10-21        2016-02-01
      3           6789         2015-08-01        2015-12-31

顺序明细表

代码语言:javascript
复制
  order_id    |    assigned_to   
---------------------------------
      1              Mark
      2              John
      3              Paul

我试图对所有三个表执行如下查询:

代码语言:javascript
复制
SELECT `serial`, `hostname`, `orderid`, `start_date`, `end_date`, `assigned_to` 
FROM `reservation`, `inventory`, `orders` 
WHERE `sn` IN(SELECT `serial` 
              FROM `reservation` 
              WHERE '2015-12-10' <= `end_date` AND '2015-12-10' >= `start_date`) 
      AND `serial` = `sn` AND `orderid` = `order_id`

在我的查询示例中,我只想显示适合我选择的日期范围内的结果,但是不管我选择的日期范围如何,我最终都会得到所有的结果。示例查询结果如下:

代码语言:javascript
复制
  serial   |   hostname  |   orderid   |   start_date   |   end_date   |   assigned_to 
-----------------------------------------------------------------------------------------
   1234        host123          1          2015-09-10      2015-10-25       Mark
   2345        host456          2          2015-10-21      2016-02-01       John
   4567        host789          2          2015-10-21      2016-02-01       John
   6789        hout910          3          2015-08-01      2015-12-31       Paul

但是,基于上面的示例查询,我想要的结果是:

代码语言:javascript
复制
  serial   |   hostname  |   orderid   |   start_date   |   end_date   |   assigned_to 
-----------------------------------------------------------------------------------------
   2345        host456          2          2015-10-21      2016-02-01       John
   4567        host789          2          2015-10-21      2016-02-01       John
   6789        hout910          3          2015-08-01      2015-12-31       Paul

我的查询做错了什么,如何才能达到预期的结果?我在INNER JOINS上也尝试过同样的方法,但最终得到了相同的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-10 22:02:08

我会摆脱子查询,因为它是不必要的。在我做的时候我也会做正确的加入。

代码语言:javascript
复制
SELECT 
    `serial`, `hostname`, `orderid`, `start_date`, `end_date`, `assigned_to`
FROM 
    `inventory`
JOIN
    `reservation` ON `serial` = `sn`
JOIN
    `orders` ON `order_id` = `orderid`
WHERE 
    `start_date` <= '2016-12-10' AND `start_date` >= '2015-12-10'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34212221

复制
相关文章

相似问题

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