# 1054 - неизвестный столбец в предложении заказа после экспорта в MariaDB из Mysql - PullRequest
0 голосов
/ 08 ноября 2019

Я получаю этот столбец # 1054 -unnown в сообщении об ошибке заказа после того, как я экспортирую свою базу данных с одного хостинга с MySql 5.7.23-cll-lve на другой хостинг с MariaDB 10.2.27-MariaDB-cll-lve. У меня оба хостинга работают прямо сейчас, поэтому я вижу, что запросы работают в первом и в 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'", потому что все остальные запросы в скобках доказываются индивидуально, и они работают, и я также стираю часть «И МЕСЯЦ (fecha_contable_fv) = 11 И ГОД (fecha_contable_fv) = 2019», и в этом случае он работает на хостинге с MariaDB, повторяю, что этот же запрос отлично работает на другом хостинге с Mysql. Таким образом, проблема должна заключаться в каком-то варианте на новом хостинге, или, возможно, в способе экспорта, или, может быть, мне следует исправить многие запросы сейчас, когда я использую MariaDB. Я надеюсь, что кто-то может мне помочь. Заранее спасибо.

1 Ответ

0 голосов
/ 10 ноября 2019

Не можете ли вы переместить тесты на tipo и fecha_contable_fv внутри? То есть выполните фильтрацию перед , выполнив все операции 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 - неизвестный столбец в ошибке предложения порядка"

...