Ir para conteúdo

POWERED BY:

Arquivado

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

Raimundo Junior

Multiplas consultas sem usar subquery

Recommended Posts

Pessoal,

Tenho 2 tabelas:

 

Tabela viagens, com campos:

id_viagem, destino, passageiro1, passageiro2, passageiro3, passageiro4

 

Tabela clientes (onde estão cadastrado os passageiros), com campos:

id_cliente, nome, telefone, idade ....

 

Gostaria de realizar uma consulta que informasse o nome de todos os passageiros que estão relacionados para uma determinada viagem sendo especificado pelo destino da viagem.

 

Estou usando uma VERSÃO ANTIGA DO MYSQL, onde a mesma não possue o recurso de SUBQUERY.

 

Como posso realizar essa consulta?

Compartilhar este post


Link para o post
Compartilhar em outros sites

select nome from clientes c, viagem v

where c.id_cliente in (passageiro1, passageiro2, passageiro3, passageiro4)

and id_viagem = 'var'

tenta fazer assim e ver o que acontece e posta aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

select nome from clientes c, viagem v
where c.id_cliente in (passageiro1, passageiro2, passageiro3, passageiro4)
and id_viagem = 'var'
tenta fazer assim e ver o que acontece e posta aqui.

Até que listou legal. Mas ainda não me atende...

Deixe explicar: Gostaria que em cada linha da consulta fosse retornado os respectivos nomes de passageiro1, passageiro2, passageiro3, passageiro4 .... Assim poderia gerar o meu formulário de forma ordenada, entendeu?

 

Existe alguma outra forma?

Compartilhar este post


Link para o post
Compartilhar em outros sites

numa query só não me vem nada a cabeça, mas poderia ser assim

 

select id_viagem,
(select nome from cliente, viagem where id_cliente = passageiro1 and id_viagem = 'var') P1,
(select nome from cliente, viagem where id_cliente = passageiro2 and id_viagem = 'var') P2,
(select nome from cliente, viagem where id_cliente = passageiro3 and id_viagem = 'var') P3,
(select nome from cliente, viagem where id_cliente = passageiro4 and id_viagem = 'var') P4
from viagem

Compartilhar este post


Link para o post
Compartilhar em outros sites

numa query só não me vem nada a cabeça, mas poderia ser assim

 

select id_viagem,
(select nome from cliente, viagem where id_cliente = passageiro1 and id_viagem = 'var') P1,
(select nome from cliente, viagem where id_cliente = passageiro2 and id_viagem = 'var') P2,
(select nome from cliente, viagem where id_cliente = passageiro3 and id_viagem = 'var') P3,
(select nome from cliente, viagem where id_cliente = passageiro4 and id_viagem = 'var') P4
from viagem

Esse seria o código perfeito mas a versão do meu Mysql não suporta essa consulta pois trata-se de uma SUBQUERY, sendo assim ele acusa erro de sintaxe.

 

Outra idéia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Outra idéia?

atualiza o teu mysql, hehehe

 

Até que listou legal. Mas ainda não me atende...

qual foi o problema do primeiro select que eu passei???

select nome from clientes c, viagem v
where c.id_cliente in (passageiro1, passageiro2, passageiro3, passageiro4)
and id_viagem = 'var'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Outra idéia?

atualiza o teu mysql, hehehe

 

Até que listou legal. Mas ainda não me atende...

qual foi o problema do primeiro select que eu passei???

select nome from clientes c, viagem v
where c.id_cliente in (passageiro1, passageiro2, passageiro3, passageiro4)
and id_viagem = 'var'

O problema do primeiro código é que ele faz uma lista de todos os nomes dificultando a criação do formulário que quero criar.

O 2o código é melhor pois cada linha da consulta já tem todos os nomes em colunas diferentes e não na mesma coluna como é o caso do 1o, entendeu?

 

Será que podemos contornar isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

select id_viagem,

case when c.id_cliente = passageiro1 then nome else null end P1,

case when c.id_cliente = passageiro2 then nome else null end P2,

case when c.id_cliente = passageiro3 then nome else null end P3,

case when c.id_cliente = passageiro4 then nome else null end P4

from clientes c, viagem v

where id_viagem = 'var'

tenta assim, vão aparecer vários campos vazios, mas de repente fica mais fácil de você tratar os dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

select id_viagem,
case when c.id_cliente = passageiro1 then nome else null end P1,
case when c.id_cliente = passageiro2 then nome else null end P2,
case when c.id_cliente = passageiro3 then nome else null end P3,
case when c.id_cliente = passageiro4 then nome else null end P4
from clientes c, viagem v
where id_viagem = 'var'
tenta assim, vão aparecer vários campos vazios, mas de repente fica mais fácil de você tratar os dados.

 

Não funcionou! Todos os campos P1, P2.. Pn ficaram em branco.

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.