не объяснимая ошибка 1064 при попытке использовать элемент в запросе mysql

#mysql

Вопрос:

У меня есть запрос, в котором я выбираю несколько строк таблицы на основе их идентификатора.

SELECT id,hotel_name FROM hotel WHERE id IN (1,2) и это прекрасно работает. Он возвращает две строки из отеля, идентификатор 1 и идентификатор 2, как и ожидалось. Идентификаторы в предложении where жестко закодированы, но данные поступают из другой таблицы, где они хранятся в столбце json как ["1","2"] . В обычной таблице я бы так и сделал, я бы так и сделал (WHERE id in (SELECT ...) , поэтому я попытался заменить оператор IN ЧЛЕНОМ, который должен вести себя так же, как В столбцах JSON.

 SELECT id,hotel_name FROM hotel 
WHERE id MEMBER OF (
    SELECT details FROM auth_events 
    WHERE auth_events.id_user=1 AND auth_events.id_auth_catalog=10 
);
 

но я понимаю

Синтаксическая ошибка в запросе рядом с «ВЫБЕРИТЕ сведения ИЗ auth_events, ГДЕ auth_events.id_user=1 И auth_events.id_a»

но я не совсем понимаю, из-за чего это происходит. Внутренний запрос SELECT details FROM auth_events WHERE auth_events.id_user=1 AND auth_events.id_auth_catalog=10 правильно возвращает ["1","2"] массив.

Кто-нибудь может помочь мне понять, что я делаю не так? Также обратите внимание, что моя версия mysql 8.0.26, а ЧЛЕН доступен с 8.0.13, так что это не должно иметь значения

Ответ №1:

Операнд MEMBER OF должен быть скалярным массивом JSON, а не набором строк.

Воспользуйся

 SELECT id,hotel_name 
FROM hotel 
JOIN auth_events ON auth_events.id_user=1 
                AND auth_events.id_auth_catalog=10
                AND hotel.id MEMBER OF (auth_events.details);
 

пс. MEMBER OF() Оператор был добавлен в MySQL 8.0.17, а не в 8.0.13.

Комментарии:

1. да, вы правы, была опечатка… Спасибо, что заметили свет!