表示具有返回多行的子查询的SQL

时间:2011-12-16 20:50:55

标签: mysql sql

我要使用以下SQL从mySQL查询一组数据:

SELECT * FROM orders 
WHERE datediff((now()), (SELECT datepurchased FROM orders WHERE email = 'me@example.com')) <= 1

但问题是我得到了#1242 - Subquery returns more than 1 row的错误,因为语句SELECT datepurchased FROM orders WHERE email = 'me@example.com'返回了多行,这是完全正确的。

我想要的想法是从orders表中进行选择,以使当前时间与datepurchased字段之间的日期差异为<=1,并email字段等于me@example.com

orders表格中可能有很多行,其电子邮件字段为me@example.com。我只是想找出所有这些行email字段等于me@example.comdatepurchased小于或等于1。

我应该如何表达我的SQL来实现这一目标?

5 个答案:

答案 0 :(得分:5)

在这种情况下不需要子查询。简单地:

SELECT *
    FROM orders
    WHERE email = 'me@example.com'
        AND DATEDIFF(NOW(), datepurchased) <= 1;

答案 1 :(得分:2)

您不需要子查询,只需在orders查询中放置两个条件。

SELECT * 
FROM   orders 
WHERE  datediff(now(), datepurchased) <= 1
AND    email = 'me@example.com'

我没试过,但看起来很简单。

答案 2 :(得分:2)

我认为你只想要一个包含两个条件的WHERE子句的普通SELECT:

SELECT * FROM orders 
WHERE email = 'me@example.com')
AND datediff(now(), datepurchased) <= 1

答案 3 :(得分:2)

我想我错过了什么,但为什么你不能做到这一点?

SELECT * FROM orders 
WHERE datediff(now(), datepurchased ) <= 1
and email = 'me@example.com'

答案 4 :(得分:0)

有什么问题
SELECT * 
    FROM orders
    WHERE datediff(now(), datepurchased) <= 1
      AND email = 'me@example.com'