#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. да, вы правы, была опечатка… Спасибо, что заметили свет!