此SQL查询是否产生正确的结果?

时间:2014-06-23 04:22:24

标签: mysql

该查询旨在显示来自按customerid分组的tbltransactions的所有记录,并从两个表的customerid匹配的tblcustomers中挑选客户名称。

select 
    a.customerid, 
    sum(transactionamount) as transactionamount, 
    b.customername 
from 
    tbltransactions a,
    tblcustomers b
where 
    a.customerid = b.customerid 
group by customerid 
order by b.customername

此查询是否确保tbltransactions中的所有记录都正确显示。我是MySQL和php的新手。感谢

其次:

当我添加“a”时。求和(transactionamount)作为transactionamount“它产生错误为什么会这样?而且它是什么样的连接查询。

2 个答案:

答案 0 :(得分:0)

试试这个..

select a.customerid, sum(transactionamount) as transactionamount, b.customername from   tbltransactions a INNER JOIN tblcustomers b ON a.customerid = b.customerid group by customerid order by b.customername

答案 1 :(得分:0)

在ANSI SQL中,使用GROUP BY时无法选择非聚合列。只能选择聚合列和聚合函数。 在您的查询中,无法选择b.customername,因为只有a.customerid是聚合列。

但MySQL实现了非标准。因此,如果a.customeridb.customername具有一对一的关系,那么您的查询可以正常运行而不会出现语法错误并产生正确的结果。

但有效的SQL语法如下:

SELECT a.customerid, transactionamount,
    b.customername
FROM (
    SELECT 
        customerid, 
        SUM(transactionamount) as transactionamount,
    FROM 
        tbltransactions
    GROUP BY customerid 
) AS a INNER JOIN tblcustomers b ON a.customerid = b.customerid 
ORDER BY b.customername;

使用SET sql_mode = 'ONLY_FULL_GROUP_BY';

执行查询时会出错

感谢您阅读我糟糕的英语。