Невозможно использовать поле в предложении WHERE в запросе SQL - PullRequest
1 голос
/ 13 января 2011

У меня есть этот запрос:

select
    l.lead_id, l.lead_date_received, 
    TIMESTAMPDIFF(MINUTE, l.lead_date_received, NOW()) AS minutes, 
    s.admin_id, a.name, a.email
from
    leads l
        inner join sales_emails s on l.lead_id = s.lead_id
        inner join admin a on a.admin_id = s.admin_id
where
    not exists (select 1 from comments c where l.lead_id = c.lead_id)
order by
    minutes, l.lead_date_received desc

Теперь я хочу поставить условие в WHERE, как minutes > 30. Однако, как вы можете видеть, minutes появляется только в предложении SELECT, а не в предложении или подзапросе FROM, что означает, что мое условие типа minutes > 30 не будет распознано в предложении WHERE.

Как мне это исправить?

Ответы [ 2 ]

2 голосов
/ 13 января 2011
SELECT l.lead_id, l.lead_date_received, TIMESTAMPDIFF(MINUTE, l.lead_date_received, NOW()) AS minutes, s.admin_id,
       a.name, a.email
FROM   leads l
INNER  JOIN sales_emails s
ON     l.lead_id = s.lead_id
INNER  JOIN admin a
ON     a.admin_id = s.admin_id
WHERE  NOT EXISTS (SELECT 1 FROM comments c WHERE l.lead_id = c.lead_id)
AND    TIMESTAMPDIFF(MINUTE, l.lead_date_received, NOW()) > 30
ORDER  BY minutes, l.lead_date_received DESC

ИЛИ добавить еще один запрос:

SELECT *
from
(
  SELECT l.lead_id, l.lead_date_received, TIMESTAMPDIFF(MINUTE, l.lead_date_received, NOW()) AS minutes, s.admin_id,
       a.name, a.email
FROM   leads l
INNER  JOIN sales_emails s
ON     l.lead_id = s.lead_id
INNER  JOIN admin a
ON     a.admin_id = s.admin_id
WHERE  NOT EXISTS (SELECT 1 FROM comments c WHERE l.lead_id = c.lead_id)
ORDER  BY minutes, l.lead_date_received DESC
)
Where minutes > 30
1 голос
/ 13 января 2011
WITH Something as (   
SELECT l.lead_id, 
       l.lead_date_received, 
       TIMESTAMPDIFF(MINUTE, l.lead_date_received, NOW()) AS minutes, 
       s.admin_id,        
       a.name, a.email 
FROM   leads l 
INNER  JOIN sales_emails s ON l.lead_id = s.lead_id 
INNER  JOIN admin a ON a.admin_id = s.admin_id 
WHERE  NOT EXISTS (SELECT top 1 1 FROM comments c WHERE l.lead_id = c.lead_id) 
)
Select * FROM Something
WHERE  minutes > 30
ORDER BY minutes, lead_date_received DESC 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...