具有三个子查询操作的行-Mysql
我试图用3个字段进行查询,其中一个是产品类型,另一个是今天的日期,另一个是两个表的计算,我遇到的问题是两个表的计算 我无法显示所有记录,因为此计算显示了多条记录,因此查询出现错误:“操作数应包含1列”,因此,如果我将这些查询限制为1,则可以正常工作,但只显示一条记录,我希望显示所有存在的记录 我需要做什么取决于三个表:具有三个子查询操作的行-Mysql,mysql,subquery,operation,Mysql,Subquery,Operation,我试图用3个字段进行查询,其中一个是产品类型,另一个是今天的日期,另一个是两个表的计算,我遇到的问题是两个表的计算 我无法显示所有记录,因为此计算显示了多条记录,因此查询出现错误:“操作数应包含1列”,因此,如果我将这些查询限制为1,则可以正常工作,但只显示一条记录,我希望显示所有存在的记录 我需要做什么取决于三个表: 表顺序: id,fecha_entrega,unidades,id_formatopeso。。。 翻译: id、交货日期、单位、id重量格式 表格重量格式: 身份证格式、身份证
- 表顺序: id,fecha_entrega,unidades,id_formatopeso。。。 翻译: id、交货日期、单位、id重量格式
- 表格重量格式: 身份证格式、身份证格式、最低库存。。。 翻译: id\u权重格式、格式\u类型、最低库存
- 表存货: 身份证,身份证披萨,fecha,身份证 翻译: id\u库存,库存\u比萨饼,日期,id\u重量格式 我需要一个运算来计算:
订单的单位
,以及每个产品今天的交货日期(重量格式)
库存
表中最后一条记录的库存
(重量格式)+----------+-------------+------------+----------------+
| id_stock | stock_pizza | fecha | id_formatopeso |
+----------+-------------+------------+----------------+
| 2 | 50 | 2017-10-25 | 2 |
| 7 | 200 | 2017-11-09 | 7 |
| 6 | 300 | 2017-11-09 | 6 |
+----------+-------------+------------+----------------+
Pedidos tipo_formato:20Ø150gr id=7;
450(unidades餐桌订单)–200(库存+比萨餐桌库存)+150(最低库存)=400(比萨餐桌库存)
Pedidos tipo_formato:22Ø180gr id=6;
500(unidades餐桌订单)–300(库存+比萨餐桌库存)+150(最低库存)=350(比萨餐桌库存)
我需要展示这样的东西:
+--------------+---------------+-------------+
| format_type |pizza_operation| date_today |
+--------------+---------------+-------------+
| tipo_formato | pizza_calculo | fecha_hoy |
+--------------+---------------+-------------+
| 20Ø 150gr | 400 | 2017-11-09 |
+--------------+---------------+-------------+
| 22Ø 180gr | 350 | 2017-11-09 |
+--------------+---------------+-------------+
我的查询不起作用:
SELECT formatopeso.tipo_formato,
(SELECT unidades FROM pedidos WHERE DATE(fecha_entrega) = DATE(NOW()))
-
(SELECT stock_pizza FROM stock WHERE fecha = (SELECT MAX(fecha) FROM stock)LIMIT 1)
+
(SELECT stock_minimo FROM formatopeso LIMIT 1)
as pizza_calculo,
(SELECT CURDATE())
as fecha_hoy
FROM pedidos
INNER JOIN formatopeso
ON formatopeso.id_formatopeso = pedidos.id_formatopeso
WHERE pedidos.fecha_entrega IN (CURDATE())
GROUP BY formatopeso.tipo_formato;
您应该加入表,而不是使用
SELECT
中的子查询。使用中的技术在库存
表中获取每个产品的最新记录
SELECT f.tipo_formato, p.unidades - s1.stock_pizza + f.stock_minimo AS pizza_calculo, p.fecha_entrega AS date_today
FROM pedidos AS p
JOIN formatopeso AS f ON f.id_formatopeso = p.id_formatopeso
JOIN stock AS s1 ON s1.id_formatopeso = p.id_formatopeso
JOIN (SELECT id_formatopeso, MAX(fecha) AS max_fecha
FROM stock
GROUP BY id_formatopeso) AS s2
ON s1.id_formatopeso = s2.id_formatopeso AND s1.fecha = s2.max_fecha
WHERE p.fecha_entrega = CURDATE()
如果不查看从中获取数据的表,很难判断您要做什么。另外,请添加表之间关系的说明,以及查询应该做什么。从查询中很难理解,因为名称不是英文的。感谢您的帮助Barmar,修复帖子,我对由此造成的不便表示歉意。显示原始数据仍然会有帮助,您的解释没有多大帮助。对不起,我已经用所有必要的信息修改了这篇文章,以了解我想做什么,再次感谢。你不知道我有多感激你的帮助,酒吧招待员,你一直在教我如何理解一个复杂的查询(对我来说)。我感谢你的兴趣,我很抱歉我以错误的方式创建了这篇文章。它的工作非常完美,也感谢你放了一个演示。
SELECT formatopeso.tipo_formato,
(SELECT unidades FROM pedidos WHERE DATE(fecha_entrega) = DATE(NOW()))
-
(SELECT stock_pizza FROM stock WHERE fecha = (SELECT MAX(fecha) FROM stock)LIMIT 1)
+
(SELECT stock_minimo FROM formatopeso LIMIT 1)
as pizza_calculo,
(SELECT CURDATE())
as fecha_hoy
FROM pedidos
INNER JOIN formatopeso
ON formatopeso.id_formatopeso = pedidos.id_formatopeso
WHERE pedidos.fecha_entrega IN (CURDATE())
GROUP BY formatopeso.tipo_formato;
SELECT f.tipo_formato, p.unidades - s1.stock_pizza + f.stock_minimo AS pizza_calculo, p.fecha_entrega AS date_today
FROM pedidos AS p
JOIN formatopeso AS f ON f.id_formatopeso = p.id_formatopeso
JOIN stock AS s1 ON s1.id_formatopeso = p.id_formatopeso
JOIN (SELECT id_formatopeso, MAX(fecha) AS max_fecha
FROM stock
GROUP BY id_formatopeso) AS s2
ON s1.id_formatopeso = s2.id_formatopeso AND s1.fecha = s2.max_fecha
WHERE p.fecha_entrega = CURDATE()