Mysql Query, где поле в (выберите значение столбца) не работает - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь получить некоторые значения с помощью предложения where, а значение для этого предложения where - это значения из записи в той же таблице.

Например,

select requestedusers from users where username = 'xyz'

Когда я запускаю приведенный выше запрос, он дает мне результат, подобный abc,mno,tuv

. Я использовал этот результат в другом запросе, подобном select data from users where username in (abc,mno,tuv), и я получаю окончательный результат.

Но мне нужно получить окончательный результат в одном запросе, например select data from users where username in (select requestedusers from users where username = 'xyz');.

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

1 Ответ

0 голосов
/ 01 июня 2018

Исправьте вашу структуру данных!Не храните разделенные запятыми списки в одном столбце.У SQL есть действительно отличная структура данных для списков.Она называется таблица , а не строка .

Вы хотите соединительную таблицу;это таблица с одной строкой на пользователя и на запрошенного пользователя.

Тем не менее, иногда мы застряли с очень, очень, очень плохими проектными решениями других людей.В этом случае вы можете использовать find_in_set():

select data
from users u
where exists (select 1 
              from users u2
              where find_in_set(u.username, u2.requestedusers) > 0 and
                    u2.username = 'xyz'
             );

Производительность будет плохой.И есть небольшой способ исправить производительность, кроме исправления модели данных.

...