Ошибка 1064 в mariadb 10.3.15, но не в mysql ver 5.5.62 - PullRequest
0 голосов
/ 02 июля 2019

Я надеялся, что кто-то сможет указать, какая часть запроса mysql может вызывать синтаксическую ошибку.

Этот запрос работал на нашем предыдущем сервере, на котором выполнялась mysql 5.5.62, но теперь показываетошибка в версии mariadb 10.3.15

SELECT p.product_id
    ,p.product_name
    ,p.product_thumb_image
FROM jos_vm_product AS p
WHERE p.product_sku = ' w '
    AND p.product_publish = 'Y'
LIMIT 0,10

UNION

(
    SELECT p.product_id
        ,p.product_name
        ,p.product_thumb_image
    FROM jos_vm_product AS p
    WHERE p.product_name LIKE ' w %'
        AND p.product_publish = 'Y'
    LIMIT 0,10
)

UNION

(
    SELECT p.product_id
        ,p.product_name
        ,p.product_thumb_image
    FROM jos_vm_product AS p
    WHERE (p.product_name LIKE '% w %')
        AND p.product_publish = 'Y'
    LIMIT 0,10
)

UNION

(
    SELECT p.product_id
        ,p.product_name
        ,p.product_thumb_image
    FROM jos_vm_product AS p
    WHERE p.product_sku LIKE 'w%'
        AND p.product_publish = 'Y'
    LIMIT 0,10
)

UNION

(
    SELECT p.product_id
        ,p.product_name
        ,p.product_thumb_image
    FROM jos_vm_product AS p
    WHERE p.product_desc LIKE '% w %'
        AND p.product_publish = 'Y'
    LIMIT 0,10
)

UNION

(
    SELECT p.product_id
        ,p.product_name
        ,p.product_thumb_image
    FROM jos_vm_product AS p
    WHERE p.product_s_desc LIKE '% w %'
        AND p.product_publish = 'Y'
    LIMIT 0,10
)

UNION

(
    SELECT p.product_id
        ,p.product_name
        ,p.product_thumb_image
    FROM jos_vm_product AS p
    WHERE ((p.product_name LIKE '%w%'))
        AND p.product_publish = 'Y'
    LIMIT 0,10
)

Я надеюсь, что запрос будет успешно выполнен, но он выдаст ошибку 1064 - у вас ошибка в синтаксисе SQL ...

1 Ответ

0 голосов
/ 02 июля 2019

Вы можете использовать LIMIT только в последнем подзапросе UNION.Может быть, MySQL [ошибочно] позволяет вам выполнить этот запрос, но MariaDB отклоняет его.

Решение?Просто заключите первый запрос в круглые скобки, как в:

( -- enclosing parenthesis
SELECT p.product_id
    ,p.product_name
    ,p.product_thumb_image
FROM jos_vm_product AS p
WHERE p.product_sku = ' w '
    AND p.product_publish = 'Y'
LIMIT 0,10
) -- enclosing parenthesis

UNION

(
    SELECT p.product_id
        ,p.product_name
        ,p.product_thumb_image
    FROM jos_vm_product AS p
    WHERE p.product_name LIKE ' w %'
        AND p.product_publish = 'Y'
    LIMIT 0,10
)

UNION

(
    SELECT p.product_id
        ,p.product_name
        ,p.product_thumb_image
    FROM jos_vm_product AS p
    WHERE (p.product_name LIKE '% w %')
        AND p.product_publish = 'Y'
    LIMIT 0,10
)

UNION

(
    SELECT p.product_id
        ,p.product_name
        ,p.product_thumb_image
    FROM jos_vm_product AS p
    WHERE p.product_sku LIKE 'w%'
        AND p.product_publish = 'Y'
    LIMIT 0,10
)

UNION

(
    SELECT p.product_id
        ,p.product_name
        ,p.product_thumb_image
    FROM jos_vm_product AS p
    WHERE p.product_desc LIKE '% w %'
        AND p.product_publish = 'Y'
    LIMIT 0,10
)

UNION

(
    SELECT p.product_id
        ,p.product_name
        ,p.product_thumb_image
    FROM jos_vm_product AS p
    WHERE p.product_s_desc LIKE '% w %'
        AND p.product_publish = 'Y'
    LIMIT 0,10
)

UNION

(
    SELECT p.product_id
        ,p.product_name
        ,p.product_thumb_image
    FROM jos_vm_product AS p
    WHERE ((p.product_name LIKE '%w%'))
        AND p.product_publish = 'Y'
    LIMIT 0,10
)

Примечание : учтите, что строки LIMIT без строк ORDER могут привести к случайной фильтрации.Это то, что вы хотите?

...