Mysql 得到一个错误,说有';如果字段列表中有未知表,则该表将存在
我试图通过查找差异来输出给客户的折扣金额,但当我当前数据库中有一个名为Mysql 得到一个错误,说有';如果字段列表中有未知表,则该表将存在,mysql,phpmyadmin,Mysql,Phpmyadmin,我试图通过查找差异来输出给客户的折扣金额,但当我当前数据库中有一个名为item的表时,我在字段列表中不断得到Error\1109未知表'item' 我正在使用此查询: SELECT orderpay.orderid , cust.name , (orderpay.totalpay - actualCost) as `discount amount` FROM cust , orderpay , tran , item, (SELECT sum(item.unitprice * tran.q
item
的表时,我在字段列表中不断得到Error\1109未知表'item'
我正在使用此查询:
SELECT orderpay.orderid , cust.name , (orderpay.totalpay - actualCost) as `discount amount`
FROM cust , orderpay , tran , item,
(SELECT sum(item.unitprice * tran.quantity) ) as actualCost
WHERE item.itemid = tran.itemid AND (orderpay.totalpay - actualCost) > 0
GROUP BY item.itemid
以下是我的表格结构:
cust
+---------+-------------+------+-----+---------+-------+
|字段|类型|空|键|默认|额外|
+---------+-------------+------+-----+---------+-------+
|custid国际(5)编号PRI 0|
|名称| varchar(22)|是| |空||
|电子邮件| varchar(33)|是| |空||
|地址| varchar(29)|是| |空||
|城市|瓦尔查尔(21)|是| |空||
|国家|瓦尔查尔(14)|是| |空||
+---------+-------------+------+-----+---------+-------+
项目
+-----------+--------------+------+-----+---------+-------+
|字段|类型|空|键|默认|额外|
+-----------+--------------+------+-----+---------+-------+
|项目ID | int(5)| NO | PRI | 0 ||
|名称| varchar(94)|是| |空||
|单价|十进制(6,2)|是| |空||
|cat | varchar(12)| YES | | NULL ||
+-----------+--------------+------+-----+---------+-------+
订单工资
+----------+---------------+------+-----+---------+-------+
|字段|类型|空|键|默认|额外|
+----------+---------------+------+-----+---------+-------+
|医嘱ID | int(5)| NO | PRI | 0 ||
|日期| varchar(10)|是| |空||
|custid | int(5)| YES | | NULL ||
|cardnum | varchar(25)| YES | | NULL ||
|卡片类型| varchar(25)|是| |空||
|工资总额|十进制(10,2)|是| |空||
+----------+---------------+------+-----+---------+-------+
特兰
+----------+--------+------+-----+---------+-------+
|字段|类型|空|键|默认|额外|
+----------+--------+------+-----+---------+-------+
|医嘱ID | int(5)| NO | PRI | 0 ||
|项目ID | int(5)| NO | PRI | 0 ||
|数量|整数(2)|是| |空||
+----------+--------+------+-----+---------+-------+
考虑如下更改查询
SELECT *,
(totalpay - computed_price) as `discount amount`
FROM
(
SELECT orderpay.orderid ,
cust.name ,
orderpay.totalpay ,
sum(item.unitprice * `tran`.quantity) as computed_price
FROM cust JOIN `tran` ON item.itemid = tran.itemid
JOIN orderpay ON cust.some_column = orderpay.some_column
JOIN item ON cust.some_column = item.some_column
GROUP BY item.itemid
) tab
WHERE (totalpay - computed_price) > 0
作为旁注,你不应该用它来计算总价格,因为如果价格改变了(而且它们确实在时间上发生了变化),你的计算就会一团糟。相反,在创建订单时,您应该记住每个订单的折扣
非常重要
还有一点让我害怕的是,你有一个名为cardnum | varchar(25)的字段,你永远不应该保留抄送号码。我认为没有子查询你就做不到。不是那种子查询:),我会试试看。是否有多个订单,你想找到所有订单的总数,或者您正在尝试获取每个订单的折扣?尝试获取具有任何类型折扣的所有订单的客户名称、ID和折扣金额选择总和(item.unitprice*tran.quantity)),这在清除信用卡号存储中不是一个很好的查询点!
Select totalpaid.custid, (totalprices.total - totalpaid.total) as `discount` FROM
(
SELECT sum(totalpay) as total, custid
FROM orderpay
GROUP BY custid
) as totalpaid JOIN
(
SELECT sum(item.unitprice * tran.quantity) as total, orderpay.custid
FROM orderpay JOIN tran ON orderpay.orderid=tran.orderid JOIN item ON tran.itemid item.itemid
GROUP BY orderpay.custid
) as totalprices ON totalpaid.custid = orderpay.custid