Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 得到一个错误,说有';如果字段列表中有未知表,则该表将存在_Mysql_Phpmyadmin - Fatal编程技术网

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