在MySQL中执行一个返回多行的子查询?

时间:2012-11-05 06:32:44

标签: mysql sql select subquery

我正在执行一个显然在MySQL中包含子查询的查询。

让我跳进代码:

SELECT DATEDIFF(CURDATE(), 
(SELECT due FROM checkOut JOIN People ON checkOut.p_id = People.p_id
 WHERE CASE WHEN DATE_SUB(date_add(CURDATE(),INTERVAL 4 MONTH), INTERVAL 3 MONTH) 
 >= checkOut.checkTime THEN 1 ELSE 0 END ORDER BY checkOut.due)
 );

主要查询是SELECT DATEDIFF()。其中就是我的子查询,它基本上搜索表格,根据间隔查找过期的项目。我知道查询会返回多行,并且它不能与我目前如何设置它一起使用。

我想要的是从我的SELECT DATEDIFF()返回的多个值,以便稍后我可以使用php循环它。为了详细说明,我希望子查询中返回的每一行都具有DATEDIFF()的关联值。如何修改此查询以执行我想要的操作?或者如果有人有更好的方法,请告诉我。

感谢任何帮助。

如果您想知道DATE_ADD()中存在DATE_SUB()的原因,那就是让查询在今天工作。

2 个答案:

答案 0 :(得分:3)

摆脱子查询,你可以直接计算差异。

SELECT  DATEDIFF(CURDATE(), due), due 
FROM    checkOut JOIN People 
            ON checkOut.p_id = People.p_id
WHERE   CASE 
           WHEN DATE_SUB(date_add(CURDATE(),INTERVAL 4 MONTH), INTERVAL 3 MONTH) 
                    >= checkOut.checkTime 
           THEN 1 
           ELSE 0 
        END 
ORDER BY checkOut.due

答案 1 :(得分:0)

将子查询用作表。例如下面:

SELECT DATEDIFF(CURDATE(), d.due)
FROM 
 (SELECT due FROM checkOut JOIN People ON checkOut.p_id = People.p_id
  WHERE CASE WHEN DATE_SUB(date_add(CURDATE(),INTERVAL 4 MONTH), INTERVAL 3 MONTH) 
       >= checkOut.checkTime THEN 1 ELSE 0 END ORDER BY checkOut.due) 
  ) AS d;