Фразирование SQL с подзапросом, возвращающим несколько строк - PullRequest
2 голосов
/ 17 декабря 2011

Я пытаюсь запросить набор данных из mySQL со следующим SQL:

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.com, у которых datepurchased меньше или равно единице.

Как мне сформулировать мой SQL для достижения этой цели?

Ответы [ 5 ]

5 голосов
/ 17 декабря 2011

В этом случае нет необходимости в подзапросе.Просто:

SELECT *
    FROM orders
    WHERE email = 'me@example.com'
        AND DATEDIFF(NOW(), datepurchased) <= 1;
2 голосов
/ 17 декабря 2011

Я думаю, что что-то упустил, но почему бы вам не сделать это?

SELECT * FROM orders 
WHERE datediff(now(), datepurchased ) <= 1
and email = 'me@example.com'
2 голосов
/ 17 декабря 2011

Я думаю, что вы просто хотите обычный SELECT с предложением WHERE, содержащим два условия:

SELECT * FROM orders 
WHERE email = 'me@example.com')
AND datediff(now(), datepurchased) <= 1
2 голосов
/ 17 декабря 2011

Вам не нужен подзапрос, просто поставьте два условия в вашем orders запросе.

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

Я не пробовал, но он кажется достаточно простым.

0 голосов
/ 17 декабря 2011

Что не так с

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

?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...