Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jorge Andrade

Tem como melhorar essa query?

Recommended Posts

Bom dia pessoal.

 

Faz uns 6 anos que não programo e recentemente voltei para a área de desenvolvimento e estou com uma dúvida.

 

Tenho 4 tabelas:

 

Cardapio

TipoCardapio

ItemCardapio

TipoCardapio_has_ItemCardapio

 

Fiz o modelo no Mysql Workbench assim:

 

Cardapio 1:N TipoCardapio

TipoCardapio N:M ItemCardapio

 

o que gerou uma terceira tabela relacionando TipoCardapio com ItemCardapio chamada TipoCardapio_has_ItemCardapio.

 

Eu consegui buscar os dados das 4 tabelas com a seguinte query:

SELECT
	cardapioName,
	tipoCardapioName,
	itemCardapioName
FROM
	cardapio,
	tipoCardapio,
	itemCardapio,
	tipoCardapio_has_itemCardapio
WHERE 
	tipoCardapio.cardapioId = cardapio.cardapioId
AND 
	tipoCardapio_has_itemCardapio.tipoCardapioId = tipoCardapio.tipoCardapioId
AND 
	tipoCardapio_has_itemCardapio.itemCardapioId = itemCardapio.itemCardapioId;

Mas eu queria saber se tem como melhorar essa query, porque acho que dá pra fazer algo melhor usando JOIN, mas nas pesquisas que fiz, não consegui desenvolver isso usando JOIN.

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você só alteraria a partir do WHERE:

SELECT
  cardapioName,
  tipoCardapioName,
  itemCardapioName
FROM
  cardapio
INNER JOIN tipoCardapio
  ON tipoCardapio.cardapioId = cardapio.cardapioId
INNER JOIN tipoCardapio_has_itemCardapio
  ON tipoCardapio_has_itemCardapio.tipoCardapioId = tipoCardapio.tipoCardapioId
INNER JOIN itemCardapio
  ON itemCardapio.itemCardapioId = tipoCardapio_has_itemCardapio.itemCardapioId

Basta definir qual JOIN é adequado a sua consulta:

  • INNER JOIN: retorna somente os registros encontrados em ambas as tabelas
  • LEFT JOIN: retorna todos os registros da tabela principal (cardapio), e os valores não encontrado na tabela relacionada são retornados como NULL
  • RIGHT JOIN: (nunca utilizei, não sei exatamente como acontece, hehe)

Nunca tive a oportunidade nem a necessidade de utilizar o RIGHT JOIN, mas como suas tabelas estão bem relacionadas, acredito que isto seja o suficiente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É isso ai lokaodomau, funcionou perfeitamente.

 

Eu tinha chegado quase perto, fiz assim:

SELECT
	cardapioName,
	tipoCardapioName,
	itemCardapioName
FROM
	cardapio
INNER JOIN
	tipoCardapio
ON
	tipoCardapio.cardapioId = cardapio.cardapioId
INNER JOIN
	tipoCardapio_has_itemCardapio
ON
	tipoCardapio_has_itemCardapio.tipoCardapioId = tipoCardapio.tipoCardapioId
AND 
	tipoCardapio_has_itemCardapio.itemCardapioId = itemCardapio.itemCardapioId

mas não ia funcionar nem a pau :)

 

Agora entendi.

 

Muito obrigado pela sua ajuda, abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.