Eu tenho uma criação que tem uma subconsulta. Para mostrar como exemplo, aqui está uma consulta que tem semelhança com a minha. Pessoalmente, tenho mais tabelas e mais argumentos na tabela (a subconsulta saiu da junção, por exemplo). Eu simplifiquei para a pergunta.
SELECT
Content,
CASE
WHEN S.User IN (SELECT UserId FROM Users WHERE Deleted = false) AND S.Permission Like '%ADMIN%' THEN 'Admin'
ELSE 'Basic'
END AS UserType,
CASE
WHEN S.User IN (SELECT UserId FROM Users WHERE Deleted = false) THEN 'Here'
ELSE 'Not'
END AS Exist
FROM (
SELECT *
FROM MyTable
WHERE Deleted = false
) as S;
Quero colocar a SELECT UserId FROM Users WHERE Deleted = false
consulta na tabela principal, pois estou usando o resultado várias vezes. No exemplo, estou usando o conteúdo 2 vezes. É apenas para otimização. Espero que possa realmente ajudar as performances.
Eu tentei algo assim:
SELECT
Content,
CASE
WHEN S.User IN (AvailableUsers) THEN 'Here'
ELSE 'Not'
END AS Exist,
CASE
WHEN S.User IN (AvailableUsers) AND S.Permission Like '%ADMIN%' THEN 'Admin'
ELSE 'Basic'
END AS UserType
FROM (
SELECT *, (SELECT UserId FROM Users WHERE Deleted = false) as AvailableUsers
FROM MyTable
WHERE Deleted = false
) as S;
Mas eu entendo Subquery returns more than 1 row
. Como posso fazer como funciona e executar a consulta apenas uma vez?
PS: Não tenho dados reais porque até eu, ao verificar a consulta, não estava procurando exatamente os dados.
Eu encontrei um caminho. Estou verificando a consulta de
MyTable
, armazene como variável e use-a. estou fazendo assim:Então funciona, e estou fazendo a solicitação apenas uma vez