вложенный запрос выбора более эффективен

#mysql

#mysql

Вопрос:

У меня есть user amp; user_code таблица, имеющая отношение «один ко многим». Пожалуйста, ознакомьтесь со структурой таблицы ниже.

Пользовательская таблица

  id email   username    date
679 test@test.com   sathis  4/20/2019 9:04
679 test@test.com   sathis  4/20/2019 9:04
679 test@test.com   sathis  4/20/2019 9:04
679 test@test.com   sathis  4/20/2019 9:04
679 test@test.com   sathis  4/20/2019 9:04
679 test@test.com   sathis  4/20/2019 9:04
679 test@test.com   sathis  4/20/2019 9:04
679 test@test.com   sathis  4/20/2019 9:04
680 test@test.com   ram 4/20/2019 9:04
680 test@test.com   ram 4/20/2019 9:04
680 test@test.com   ram 4/20/2019 9:04
681 test@test.com   Steve   4/20/2019 9:04
681 test@test.com   Steve   4/20/2019 9:04
681 test@test.com   Steve   4/20/2019 9:04
681 test@test.com   Steve   4/20/2019 9:04
681 test@test.com   Steve   4/20/2019 9:04
  

Таблица User_Code

 user_id code
679 J039
679 J080
679 J320
679 J54L
679 K31P
679 L05C
679 T030
679 V150
680 J039
680 J080
680 J320
681 ABC12
681 CD123
681 opo123
681 qw123
681 ieu12
  

если я даю username (из таблицы user), то он должен проверять code (из таблицы user_code), и тот же код должен проверять, представлен ли он для какой-либо другой user_id (из таблицы user_code), и должен возвращать это user_id также.

например.

   id    username
679 sathis
680 ram
  

из приведенной выше таблицы, если я получу sathis в качестве входных данных. я должен получить ram в качестве выходных результатов.
Потому что Sathis's код также представлен для Ram также.

Пожалуйста, найдите мой вложенный запрос sql ниже

 select id,username from users
where 
id in (
select user_id from user_code
where
code in (
select code from user_code
where user_id = ( select id from user where username = 'sathis')))
  

Как я могу упростить этот запрос более эффективно,

Ответ №1:

для повышения производительности вы могли бы избежать предложения IN и использовать inner join в подзапросе

 select id, username 
from users 
inner join (
  select distinct user_id 
  from User_Code 
  inner join  (
    select code 
    from User_Code 
    inner join User ON User_Code.user_id = user.id
    where  username = 'sathis'
  ) t on t.code = User_Code.code
) t2 on t2.user_id = users.id 
  

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

1. это не проверка с помощью code из таблицы user_code., это просто печать только Sathis's записи. это также должно привести Ram .

2. покажите мне ошибку .. .. ответ обновлен. удаление неправильного. (точка)

3. Запрос работает., но он не дает Ram's записи., он должен принести. потому что оба Sathis amp; Ram имеют одинаковый code в user_code таблице.

4. ` пользователь внутреннего соединения С кодом.user_id = user.id ` в этой строке code.user_id — код является объектом таблицы user_code ?