mysql - #1054 - 从 Mysql 导出到 MariaDB 后 order 子句中的未知列
问题描述
在我将数据库从一个使用 MySql 5.7.23-cll-lve 的主机导出到另一台使用 MariaDB 10.2.27-MariaDB-cll-lve 的主机后,我收到了 #1054 -unknown column in order 子句错误。我现在两个主机都在工作,所以我可以看到查询在第一个和 MariaDB 中工作,会抛出这个错误。我检查了该列是否存在,结构是相同的。我也尝试使用“MYSQL40”导出,但没有任何改变。
我能做些什么?
我将提出问题的查询(不是唯一的,但其他类似):
SELECT * FROM (
(SELECT result.*, IFNULL(SUM(mv.monto_pago_fv), 0) AS pago FROM(
(SELECT DISTINCT f.id_factura_de_venta, f.numero_factura_de_venta, f.fecha_contable_fv, f.fecha_fv, f.anular_fv,
f.id_cliente, f.tipo,
c.rut, c.nombre, SUM(fot.monto_pago_ot) AS monto_facturado_neto, SUM(ROUND(fot.monto_pago_ot*0.19)) AS iva
FROM facturas_de_ventas f
JOIN clientes_y_proveedores c ON f.id_cliente=c.id_cliente_o_proveedor
JOIN facturas_de_ot fot ON f.id_factura_de_venta=fot.id_factura_de_venta
GROUP BY f.id_factura_de_venta
ORDER BY f.id_factura_de_venta DESC)
UNION
(SELECT id_factura_de_venta, numero_factura_de_venta, fecha_contable_fv, fecha_fv, anular_fv,
id_cliente, tipo, rut, nombre, SUM(monto_facturado_neto) AS monto_facturado_neto, SUM(iva) as iva FROM(
(SELECT DISTINCT f.*, c.rut, c.nombre, SUM(s.valor_sf*s.cantidad_sf) AS monto_facturado_neto,
SUM(ROUND(s.valor_sf*s.cantidad_sf*0.19)) as iva
FROM facturas_de_ventas f
JOIN clientes_y_proveedores c ON f.id_cliente=c.id_cliente_o_proveedor
JOIN servicios_factura s ON f.id_factura_de_venta=s.id_factura_de_venta
GROUP BY f.id_factura_de_venta)
UNION
(SELECT DISTINCT f.*, c.rut, c.nombre, SUM(mf.valor_mf*mf.cantidad_mf) AS monto_facturado_neto, SUM(IF(m.iva_material=1, mf.valor_mf*mf.cantidad_mf*0.19, 0)) AS iva
FROM facturas_de_ventas f
JOIN clientes_y_proveedores c ON f.id_cliente=c.id_cliente_o_proveedor
JOIN materiales_factura mf ON f.id_factura_de_venta=mf.id_factura_de_venta
JOIN materiales m ON mf.id_material=m.id_material
GROUP BY f.id_factura_de_venta)
) AS fms
GROUP BY id_factura_de_venta)
) AS result
LEFT JOIN montos_pago_v mv ON result.id_factura_de_venta=mv.id_factura_de_venta
GROUP BY result.id_factura_de_venta)
UNION ALL
(SELECT DISTINCT f.id_factura_de_venta, ncv.numero_ncv, ncv.fecha_contable_ncv, ncv.fecha_ncv,
f.anular_fv, f.id_cliente, 'Nota crédito' AS tipo, c.rut, c.nombre,
ncv.valor_descontado_ncv AS total_neto, ROUND(ncv.valor_descontado_ncv*0.19) AS iva, SUM(IFNULL(m.monto_pago, 0)) AS pago
FROM notas_credito_ventas ncv
JOIN facturas_de_ventas f ON ncv.id_factura_de_venta=f.id_factura_de_venta AND f.anular_fv=0
JOIN clientes_y_proveedores c ON f.id_cliente=c.id_cliente_o_proveedor
LEFT JOIN montos_pago_ncv m ON ncv.id_nota_credito_venta=m.id_nota_credito_venta
WHERE ncv.valor_descontado_ncv != 0
GROUP BY ncv.id_nota_credito_venta
ORDER BY ncv.id_nota_credito_venta)
)AS r
WHERE tipo!='boleta' AND MONTH(fecha_contable_fv) =11 AND YEAR(fecha_contable_fv) =2019;
我检查了一下,问题出在最后的 WHERE 子句中,特别是在“tipo!='boleta'”之后,因为我单独证明了括号中的所有其他查询并且它们有效,并且我还删除了部分“AND MONTH(fecha_contable_fv)= 11 AND YEAR(fecha_contable_fv) =2019",在这种情况下,它可以在 MariaDB 的托管中使用,我重复一遍,相同的查询可以在其他使用 Mysql 的托管中完美运行。所以问题应该是新主机中的某个选项,或者可能是导出方式,或者现在我正在使用 MariaDB,我应该更正很多查询。我希望有一个人可以帮助我。提前致谢。
解决方案
你不能在里面tipo
和fecha_contable_fv
里面移动测试吗?那就是在执行所有and之前进行过滤。UNIONing
GROUPing
这是一种一步完成日期检查的方法(没有更快,只是更简洁):
fecha_contable_fv LIKE '2019-11%'
如果有可用的索引,我建议:
fecha_contable_fv >= '2019-11-01'
AND fecha_contable_fv < '2019-11-01' + INTERVAL 1 MONTH
完整的错误信息是什么?它不是说的不仅仅是“#1054 - order 子句中的未知列错误”
推荐阅读
- javascript - 无法在反应中扩展类组件,其他一切正常
- entity - 在 DDD 中,CRUD 操作是否可以独立于 AR 对聚合实体执行?
- php - 如何从带有 sql 的表中使用 php 获取选中的复选框
- ruby-on-rails - 无法使用标准地址(this).balance 获得智能合约地址余额;
- c - 在二维数组中找到最长的路径首先增加然后减少
- javascript - 通过json脚本读取一个Json文件并显示在网页中
- vim - vim中如何集成limelight?
- c - 来自 C 初学者的一个简单问题,关于数组
- java - Fillgrid 方法在井字游戏程序中不起作用
- gcc - 在 CUDA 编译期间,CLion 中的目标卸载过程中使用了错误的编译器