2012-01-13 207 views
1

有这个问题,我不知道如何从多个表中提取数据。我试图使用INNER JOIN和UNION。 这里是我想出迄今:sql查询。与多个表相关

select `name_ganre` from `teleprogram`.`ganres` 
where `idganre`=any(select `idganre` from `teleprogram`.`ganre-transfer` 
where `idtransfer`=any(select `idtransfer` from `teleprogram`.`broadcasting`)); 

select `name_channel` from `teleprogram`.`channel` 
where `idchannel`= any(select `idchannel` from `teleprogram`.`broadcasting`); 

我需要在通道的一名名带。另一个流派的名字。

broadcasting 
rows: idtransfer, idchannel 

transfer 
rows: idtransfer, name_transfer 

ganre-transfer 
rows: idganre, idtransfer 

ganre 
rows: idganre, name_ganre 

channels 
rows: idchannel, name_channel 

我试图通过广播获取数据。可能会简化吗? 查询后:name_channel,name_ganre

谢谢!

+0

哪个表是“主”(或“父”)表?主表中每行的所有其他表中总是有匹配的行吗? – Bohemian 2012-01-13 09:12:14

+0

请注意,因为每个通道可以有多个类型,所以某些通道(每个通道一个行,每个流派)可能会有多个行。 – 2012-01-13 09:14:57

+0

@波希米亚:这里有一个多对多的关系,而不是父母与子女的关系。 – 2012-01-13 09:16:04

回答

1

,你需要查询的是:

select c.name_channel, g.name_ganre 
from channels c 
inner join broadcasting b on b.idchannel = c.idchannel 
inner join ganre-transfer gt on gt.idtransfer = b.idtransfer 
inner join ganre g on g.idganre = gt.idganre 

你可以看到如何INNER JOIN工作HERE

+1

@MarkBannister谢谢m8 :) – 2012-01-13 09:22:19

+0

非常感谢!按原样工作!非常感谢! – Feor 2012-01-13 09:23:05