2014-01-09 217 views
-2

当我运行这个SQL查询时,它忽略了WHERE的日期。SQL忽略WHERE语句

任何人都可以解释我做错了什么?尝试了一个子查询,但也没有工作!对于SQL来说是新手,但是被我认为是一个相对简单的查询所困扰。

SELECT c.Customer_No, c.Name, c.Lat, c.Lon, o.Order_ref, o.Currency, 
    o.Salesperson_code, o.Date, sum(o.Amount) as order_total, 
    count(DISTINCT o.Order_ref) as order_count 
FROM navision_orders o, navision_customers c 
WHERE c.Customer_No = o.Customer_No 
    and o.Date > '2013-01-09' 
    and o.Date < '2014-01-01' 
GROUP BY c.Name 
ORDER BY order_total DESC 
LIMIT 20 
+1

为什么你认为它不工作? – a1ex07

+0

请停止使用非ANSI标准'GROUP BY'。 – Kermit

回答

1

您使用您的WHERE条款,你应该使用一个JOIN条款。所以试试这个:

FROM navision_orders o 
INNER JOIN navision_customers c ON c.Customer_No = o.Customer_No 
Where o.Date > '2013-01-09' and o.Date < '2014-01-01' 
+0

它有什么用?特别是在'navision_orders o,'后面有多余的逗号。我同意ANSI'JOIN'比'WHERE'中的连接条件好得多且清晰的语法,但是为什么'LEFT JOIN',而不是'INNER JOIN'在这里? – a1ex07

+0

@ a1ex07我意识到了第一个问题并修复了它,第二个可能只是我的T-SQL进来。所以'INNER JOIN'可以工作,但是'LEFT JOIN'不会?我会解决这个问题。 – hichris123

+0

'LEFT JOIN'也可以工作 - 我无法确定,直到OP发布有关该问题的更多细节。但是在问题中WHERE中的条件对应于INNER JOIN而不是LEFT。 – a1ex07