2011-01-13 153 views
1

我有这个疑问:SQL查询问题

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子句中被识别。

我该如何解决这个问题?由于

+1

任我思念的东西明显here..butü可以不加`而且TIMESTAMPDIFF(MINUTE,l.lead_date_received,NOW()) > 30`到你的where子句? – InSane 2011-01-13 07:15:23

+0

@InSane:你说得对,我错过了这一点:(谢谢 – Sarfraz 2011-01-13 07:27:05

回答

2
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
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