Consultas aninhadas

Postado por Paulo Brito em 14 de Setembro de 2010  •  Comentários (0)  • 

Muitas vezes é preciso fazer uma consulta que seja a combinação de várias outras pequenas consultas de SQL. Aqui segue um exemplo bem simples, apenas mostrando e explicando como você pode combinar essas consultas.

SELECT * FROM (
SELECT * FROM `exemplo` WHERE id = 3 ORDER BY nome ASC
) as tab1
WHERE nome like '%teste%' ORDER BY nome DESC


Vamos entender o código por partes

# PARTE 1
# A consulta que esta sendo feita, toma como base o resultado da consulta de
# dentro, ou seja, o "SELECT *" esta selecionado TUDO que foi retornado pela #
# consulta de dentro
# Sempre é necessário utilizar um ALIAS para ela, nesse caso TAB1

SELECT * FROM (

# PARTE 2
# Essa consulta é feita primeiro
# O resultado dela sera utilizado pela primeira parte
SELECT * FROM `exemplo` WHERE id = 3 ORDER BY nome ASC

) as tab1


# PARTE 3
# Aqui posso utilizar normalmente o WHERE e o ORDER
WHERE nome like '%teste%'
ORDER BY nome DESC


O código colocado em anexo é apenas um exemplo mais complexo. Nesse caso o objetivo era selecionar alunos de uma academia que:

1) Todos que já pagaram determinado mês, mesmo sem frequentar a academia naquele mês.

2) Todos que já frequentaram pelo menos uma vez, mesmo sem pagar.

3) E no final, não mostrar alunos repetidos, pois ao selecionar os que frequentaram ao menos uma vez, quem já pagou também ia aparecer nessa lista

Não sei se compliquei, mas foi a maneira que encontrei para resolver....


  • Download
  • Código fonte
  • Comentar
  • Comentários
blog comments powered by Disqus

Comentários ir para topo

Código fonte ir para topo