MYSQL: выберите *, где IN (ЗАМЕНИТЬ (...)) - PullRequest
1 голос
/ 03 апреля 2020

У меня есть следующий запрос:

    SELECT value from catalog_category_entity_varchar WHERE entity_id IN
('1','2','10','47')

Этот запрос дает результаты.

value
ok
ok
ok
ok

Следующий запрос

    SELECT value from catalog_category_entity_varchar WHERE entity_id IN
(REPLACE("'1','2','10','47'", 'dont', 'care'))

Этот запрос не дает результаты, потому что я думаю, что он генерирует "'1','2','10','47'", а entity_id - это целое число, а не строка.

Таким образом, я попытался выполнить следующий запрос, но все еще не дал результатов

    SELECT value from catalog_category_entity_varchar WHERE entity_id IN
(TRIM(BOTH '"' FROM REPLACE("'1','2','10','47'", 'dont', 'care')))

Мой вопрос как я могу сгенерировать запрос как первый с заменой? Спасибо всем за ваше время.

РЕДАКТИРОВАТЬ: ОБРАЗЕЦ ДАННЫХ:

CREATE TABLE catalog_category_entity_varchar (entity_id int(10), value varchar(255));
INSERT INTO catalog_category_entity_varchar VALUES (1,'ok'),(2,'ok'),(10,'ok'),(47,'ok');

Первоначальный запрос, который я пытаюсь выполнить, чтобы дать результаты

    SELECT value from catalog_category_entity_varchar WHERE entity_id
IN ( CONCAT('"', REPLACE('1/2/10/47', '/', '","'), '"') );

1 Ответ

0 голосов
/ 03 апреля 2020

Вы можете сделать это с помощью функции find_in_set():

set @entity = '1/2/10/47';

select * from catalog_category_entity_varchar
where find_in_set(entity_id, replace(@entity, '/', ','))

См. Демоверсию . Результаты:

| entity_id | value |
| --------- | ----- |
| 1         | ok    |
| 2         | ok    |
| 10        | ok    |
| 47        | ok    |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...