DecoST 0 Denunciar post Postado Abril 10, 2016 CREATE TABLE Taxi ( Prefixo CHAR(4), Placa CHAR(7) NOT NULL, Marca CHAR(30), Modelo CHAR(30), NomeMotorista CHAR(30) NOT NULL, Ano NUMBER(4) NOT NULL CHECK (Ano > 2000), CONSTRAINT PkTaxi PRIMARY KEY (Prefixo));CREATE TABLE Passageiro ( CPF NUMBER(8), Nome CHAR(30), email CHAR(30), telefone NUMBER(8), CONSTRAINT PkPassageiro PRIMARY KEY (CPF)); CREATE TABLE Corrida ( Id NUMBER(6), BairroDaPartida CHAR(30) CHECK (BairroDaPartida IN ('Floresta','Sao Joao','Higienopolis','Auxiliadora')), Valor NUMBER(5), Kms NUMBER(5), Prefixo CHAR(4), CPF NUMBER(8), CONSTRAINT PkCorrida PRIMARY KEY (Id), CONSTRAINT FkCorridaTaxi FOREIGN KEY (Prefixo) REFERENCES Taxi, CONSTRAINT FkCorridaPassageiro FOREIGN KEY (CPF) REFERENCES Passageiro); Como faço para: --d.Listar os prefixos dos taxis que não realizaram corridas tanto partindo do bairro 'Floresta' quanto do bairro 'Sao Joao'.--e.Listar os nomes dos passageiras e dos motoristas de taxis que realizaram corridas mais de uma vez juntos Compartilhar este post Link para o post Compartilhar em outros sites
wbpereir 1 Denunciar post Postado Abril 10, 2016 Caro tente utilizar o SQL abaixo: SELECT c.prefixo, t.marca, t.nomemotorista FROM corrida c INNER JOIN taxi t ON t.prefixo = c.prefixo WHERE c.bairrodapartida NOT IN('Floresta', 'Sao Joao'); NOT IN: trás tudo que não contém os parametros passados. INNER JOIN: é apenas para informar quais são os motoristas mas se quiser apenas o prefixo mesmo acaba sendo desnecessário. Me avise se deu certo. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Abril 10, 2016 D - tente com NOT EXISTS E - tente Count group by com having Compartilhar este post Link para o post Compartilhar em outros sites
wbpereir 1 Denunciar post Postado Abril 10, 2016 SELECT c.prefixo, t.nomemotorista, p.nome, COUNT(c.id) AS qtd_corridas INTO #corridas FROM corrida c INNER JOIN taxi t ON t.prefixo = c.prefixo INNER JOIN passageiro p ON p.cpf = c.cpf WHERE c.bairrodapartida NOT IN('Floresta', 'Sao Joao') GROUP BY c.prefixo, t.marca, t.nomemotorista, p.nome SELECT * FROM #corridas WHERE qtd_corridas > 1 Não esqueça de deletar a tabela temporária #corridas após executar a consulta ou antes de executar caso ela exista. Compartilhar este post Link para o post Compartilhar em outros sites
DecoST 0 Denunciar post Postado Abril 10, 2016 Caro tente utilizar o SQL abaixo: SELECT c.prefixo, t.marca, t.nomemotorista FROM corrida c INNER JOIN taxi t ON t.prefixo = c.prefixo WHERE c.bairrodapartida NOT IN('Floresta', 'Sao Joao'); NOT IN: trás tudo que não contém os parametros passados. INNER JOIN: é apenas para informar quais são os motoristas mas se quiser apenas o prefixo mesmo acaba sendo desnecessário. Me avise se deu certo. Estou usando o Oracle Application Express, ele não usa INNER JOIN Compartilhar este post Link para o post Compartilhar em outros sites
DecoST 0 Denunciar post Postado Abril 10, 2016 D - tente com NOT EXISTS E - tente Count group by com having Estes não funcionaram corretamente. D- select distinct Prefixo from Corrida where not exists (select Id from Corrida Where BairroDaPartida = all('Sao Joao','Floresta')); E-select T.NomeMotorista, P.Nome from Taxi T, Passageiro P, Corrida C group by P.Nome, T.NomeMotorista having count(P.Nome) > 1; Compartilhar este post Link para o post Compartilhar em outros sites
wbpereir 1 Denunciar post Postado Abril 10, 2016 Nunca utilizei Oracle mas é estranho não ter INNER JOIN enfim. Tente relacionar as tabelas do modo abaixo. Ao menos em SQLServer e MySQL funciona. Perceba que relaciono as tabelas pelo WHERE e no FROM informo quais tabelas devem ser utilizadas que no seu caso são três. Acredito que se seu problema for apenas o relacionamento isso deve ajudar. Obs: não esqueça de utilizar um AND para informar mais de um relacionamento. SELECT * FROM tbl_usuario, tbl_acessos WHERE tbl_usuario.id_usuario = tbl_acessos.id_usuario Compartilhar este post Link para o post Compartilhar em outros sites
DecoST 0 Denunciar post Postado Abril 10, 2016 Nunca utilizei Oracle mas é estranho não ter INNER JOIN enfim. Tente relacionar as tabelas do modo abaixo. Ao menos em SQLServer e MySQL funciona. Perceba que relaciono as tabelas pelo WHERE e no FROM informo quais tabelas devem ser utilizadas que no seu caso são três. Acredito que se seu problema for apenas o relacionamento isso deve ajudar. Obs: não esqueça de utilizar um AND para informar mais de um relacionamento. SELECT * FROM tbl_usuario, tbl_acessos WHERE tbl_usuario.id_usuario = tbl_acessos.id_usuario No caso tenho que selecionar os prefixos que não realizaram corridas tanto partindo do bairro 'Floresta' quanto do bairro 'Sao Joao'. acontece que alguns prefixos que realizaram corridas para 'Floresta' e 'Sao Joao' também realizam corridas para outros destinos como 'Higienopolis' por exemplo, e são estes prefixos que não consigo eliminar. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Abril 10, 2016 CREATE TABLE Taxi ( Prefixo CHAR(4), Placa CHAR(7) NOT NULL, Marca CHAR(30), Modelo CHAR(30), NomeMotorista CHAR(30) NOT NULL, Ano NUMBER(4) NOT NULL CHECK (Ano > 2000), CONSTRAINT PkTaxi PRIMARY KEY (Prefixo) ); CREATE TABLE Passageiro ( CPF NUMBER(8), Nome CHAR(30), email CHAR(30), telefone NUMBER(8), CONSTRAINT PkPassageiro PRIMARY KEY (CPF) ); CREATE TABLE Corrida ( Id NUMBER(6), BairroDaPartida CHAR(30) CHECK (BairroDaPartida IN ('Floresta','Sao Joao','Higienopolis','Auxiliadora')), Valor NUMBER(5), Kms NUMBER(5), Prefixo CHAR(4), CPF NUMBER(8), CONSTRAINT PkCorrida PRIMARY KEY (Id), CONSTRAINT FkCorridaTaxi FOREIGN KEY (Prefixo) REFERENCES Taxi, CONSTRAINT FkCorridaPassageiro FOREIGN KEY (CPF) REFERENCES Passageiro ); Como faço para: --d.Listar os prefixos dos taxis que não realizaram corridas tanto partindo do bairro 'Floresta' quanto do bairro 'Sao Joao'. --e.Listar os nomes dos passageiras e dos motoristas de taxis que realizaram corridas mais de uma vez juntos d usando NOT IN --realizaram corridas tanto partindo do bairro 'Floresta' quanto do bairro 'Sao Joao' select Prefixo from corridas where BairroDaPartida in ('Floresta','Sao Joao') --Listar os prefixos dos taxis que não realizaram corridas tanto partindo do bairro 'Floresta' quanto do bairro 'Sao Joao'. select * from taxi where Prefixo not in (select Prefixo from corridas where BairroDaPartida in ('Floresta','Sao Joao')) 2 usando group by having e tabela virtual --passageiras e dos motoristas de taxis que realizaram corridas mais de uma vez juntos select prefixo,cpf from corrida group by prefixo,cpf having count(*) > 1 -- select taxi,nome_motorista , passageiro.nome from taxi,passageiro,(select prefixo,cpf from corrida group by prefixo,cpf having count(*) > 1) frequentes where taxi,prefixo = frequente.prefixo and passageiro.cpf = frequente.cpf Creio ser isto (uma solução possíveL) Compartilhar este post Link para o post Compartilhar em outros sites
wbpereir 1 Denunciar post Postado Abril 10, 2016 Teste esse SQL. Caso de algum erro me informe. SELECT c.prefixo, t.nomemotorista, p.nome, COUNT(c.id) AS qtd_corridas INTO #corridas FROM corrida c, taxi t, passageiro p WHERE (t.prefixo = c.prefixo AND p.cpf = c.cpf) AND c.prefixo NOT IN ( SELECT DISTINCT prefixo FROM corrida WHERE bairrodapartida IN('Floresta', 'Sao Joao','Higienopolis') ) GROUP BY c.prefixo, t.nomemotorista, p.nome SELECT * FROM #corridas WHERE qtd_corridas > 1 Compartilhar este post Link para o post Compartilhar em outros sites
DecoST 0 Denunciar post Postado Abril 10, 2016 CREATE TABLE Taxi ( Prefixo CHAR(4), Placa CHAR(7) NOT NULL, Marca CHAR(30), Modelo CHAR(30), NomeMotorista CHAR(30) NOT NULL, Ano NUMBER(4) NOT NULL CHECK (Ano > 2000), CONSTRAINT PkTaxi PRIMARY KEY (Prefixo) ); CREATE TABLE Passageiro ( CPF NUMBER(8), Nome CHAR(30), email CHAR(30), telefone NUMBER(8), CONSTRAINT PkPassageiro PRIMARY KEY (CPF) ); CREATE TABLE Corrida ( Id NUMBER(6), BairroDaPartida CHAR(30) CHECK (BairroDaPartida IN ('Floresta','Sao Joao','Higienopolis','Auxiliadora')), Valor NUMBER(5), Kms NUMBER(5), Prefixo CHAR(4), CPF NUMBER(8), CONSTRAINT PkCorrida PRIMARY KEY (Id), CONSTRAINT FkCorridaTaxi FOREIGN KEY (Prefixo) REFERENCES Taxi, CONSTRAINT FkCorridaPassageiro FOREIGN KEY (CPF) REFERENCES Passageiro ); Como faço para: --d.Listar os prefixos dos taxis que não realizaram corridas tanto partindo do bairro 'Floresta' quanto do bairro 'Sao Joao'. --e.Listar os nomes dos passageiras e dos motoristas de taxis que realizaram corridas mais de uma vez juntos d usando NOT IN --realizaram corridas tanto partindo do bairro 'Floresta' quanto do bairro 'Sao Joao' select Prefixo from corridas where BairroDaPartida in ('Floresta','Sao Joao') --Listar os prefixos dos taxis que não realizaram corridas tanto partindo do bairro 'Floresta' quanto do bairro 'Sao Joao'. select * from taxi where Prefixo not in (select Prefixo from corridas where BairroDaPartida in ('Floresta','Sao Joao')) 2 usando group by having e tabela virtual --passageiras e dos motoristas de taxis que realizaram corridas mais de uma vez juntos select prefixo,cpf from corrida group by prefixo,cpf having count(*) > 1 -- select taxi,nome_motorista , passageiro.nome from taxi,passageiro,(select prefixo,cpf from corrida group by prefixo,cpf having count(*) > 1) frequentes where taxi,prefixo = frequente.prefixo and passageiro.cpf = frequente.cpf Creio ser isto (uma solução possíveL) --d.Listar os prefixos dos taxis que não realizaram corridas tanto partindo do bairro 'Floresta' quanto do bairro 'Sao Joao'. select Prefixo from Taxi where Prefixo not in (select Prefixo from Corrida where BairroDaPartida in ('Floresta','Sao Joao')); --e.Listar os nomes dos passageiras e dos motoristas de taxis que realizaram corridas mais de uma vez juntos. select Taxi.NomeMotorista , Passageiro.Nome from Taxi,Passageiro,(select Prefixo,CPF from Corrida group by Prefixo,CPF having count(*) > 1) Corrida where Taxi.Prefixo = Corrida.Prefixo and Passageiro.CPF = Corrida.CPF; Pode crer essa foi a solução que pra mim estava impossível, muito obrigado, ainda chego nesse nível :ph34r: Compartilhar este post Link para o post Compartilhar em outros sites
DecoST 0 Denunciar post Postado Abril 10, 2016 Teste esse SQL. Caso de algum erro me informe. SELECT c.prefixo, t.nomemotorista, p.nome, COUNT(c.id) AS qtd_corridas INTO #corridas FROM corrida c, taxi t, passageiro p WHERE (t.prefixo = c.prefixo AND p.cpf = c.cpf) AND c.prefixo NOT IN ( SELECT DISTINCT prefixo FROM corrida WHERE bairrodapartida IN('Floresta', 'Sao Joao','Higienopolis') ) GROUP BY c.prefixo, t.nomemotorista, p.nome SELECT * FROM #corridas WHERE qtd_corridas > 1 Wbpereir encontrei a solução com a ajuda do Motta, espero poder retribuir a atenção! Compartilhar este post Link para o post Compartilhar em outros sites