AJUDAAA select!

Ola preciso de uma ajuda na criacao de um select entre 2 tabelas onde tenho uma tabela Partida possui 2 campos time_casa, time_vizitante que sao chaves extrangeiras, e essa tabela eh ligada a uma tabela Time.

Duvida - como fao um select na tabela Partida que eu consiga o nome dos dois times???

segue o dump das 2 tabelas a baixo

Tabela Partida

CREATE TABLE banco.partida (

id int(10) unsigned NOT NULL auto_increment,

hora time NOT NULL,

id_time_casa int(10) unsigned NOT NULL,

id_time_visitante int(10) unsigned NOT NULL,

resul_casa int(10) unsigned NOT NULL,

resul_visitante int(10) unsigned NOT NULL,

local varchar(45) NOT NULL,

id_rodada int(10) unsigned NOT NULL,

PRIMARY KEY (id),
KEY id_time_casa (id_time_casa),
KEY id_time_visitante (id_time_visitante),

KEY id_rodada (id_rodada),
CONSTRAINT id_rodada FOREIGN KEY (id_rodada) REFERENCES rodada (id),

CONSTRAINT id_time_casa FOREIGN KEY (id_time_casa) REFERENCES time (id),
CONSTRAINT
id_time_visitante FOREIGN KEY (id_time_visitante) REFERENCES time (id)
) ENGINE=InnoDB DEFAULT
CHARSET=latin1;

Tabela Time

CREATE TABLE banco.time (
id int(10) unsigned NOT NULL auto_increment,

nome varchar(50) NOT NULL,

campo varchar(50) NOT NULL,

escudo varchar(100) default NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT

Oi,

  1. Isso é OFF-Topic? Acho mais adequado ao forum de Banco de Dados, peça a um moderador mover a thread para lá.

  2. Já ouviu falar em SubQuery? Ficaria mais ou menos assim:

select (select nome from time where time.id = partida.mandante_id) as nome_mandante, (select nome from time where time.id = partida.visitante_id) as nome_visitante from partida

Peço desculpas, mas nem olhei a definição de suas tabelas (se tivesse usando a TAG CODE aqui do forum talvez olharia). A definição dessas subconsultas é por ai. Detalhe: elas tem que retornar no máximo um único registro por vez e você só pode selecionar uma coluna a cada subconsulta.

malz eh q pensei q nao teria um topico pra banco sql

quanto ao codigo como coloco dessa maneira formatado ??

[quote=furacao123]malz eh q pensei q nao teria um topico pra banco sql

quanto ao codigo como coloco dessa maneira formatado ??[/quote]

Oi,

LEIA: http://www.guj.com.br/posts/list/50115.java

Segue a baixo o dumb das tabelas pra dar uma olhada melhor.

CREATE TABLE `banco`.`partida` (

`id` int(10) unsigned NOT NULL auto_increment,

`hora` time NOT NULL,

`id_time_casa` int(10) unsigned NOT NULL,

`id_time_visitante` int(10) unsigned NOT NULL,

`resul_casa` int(10) unsigned NOT NULL,

`resul_visitante` int(10) unsigned NOT NULL,

`local` varchar(45) NOT NULL,

`id_rodada` int(10) unsigned NOT NULL,

PRIMARY KEY (`id`),
KEY `id_time_casa` (`id_time_casa`),
KEY `id_time_visitante` (`id_time_visitante`),

KEY `id_rodada` (`id_rodada`),
CONSTRAINT `id_rodada` FOREIGN KEY (`id_rodada`) REFERENCES `rodada` (`id`),

CONSTRAINT `id_time_casa` FOREIGN KEY (`id_time_casa`) REFERENCES `time` (`id`),
CONSTRAINT 
`id_time_visitante` FOREIGN KEY (`id_time_visitante`) REFERENCES `time` (`id`)
) ENGINE=InnoDB DEFAULT 
CHARSET=latin1;


Tabela Time



CREATE TABLE `banco`.`time` (
`id` int(10) unsigned NOT NULL auto_increment,

`nome` varchar(50) NOT NULL,

`campo` varchar(50) NOT NULL,

`escudo` varchar(100) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT 

1º) porque a tabela “partida” a PK esta composta? nao bastaria o campo ID ser a PK?

2º) “time” não é palavra reservada no BD que usa?

3º) Vai uma forma de fazer o select:

SELECT p.id, p.hora, tc.nome, p.resul_casa, tv.nome, p.resul_visitante, p.local, p.id_rodada FROM partida p, time tc, time tv WHERE p.id_time_casa = tc.id AND p.id_time_visitante = tv.id

OBS: Tem a opção de fazer usando INNER JOIN tb.

vlw pelo select vou tentar aqui pra ver se da certo

com o INNER JOIN… acho que vai dar (fiz rapidinho aqui)

select p.id, p.local, tcasa.nome, tvisita.nome
from partida p
inner join time tcasa on p.id_time_casa = tcasa.id
inner join time tvisita on p.id_time.visitante = tvisita.id