2013-03-04 123 views
0

挣扎,我有以下型号:与MySQL查询

enter image description here

我一直在这一段时间,仍然不知道如何正确地解决它。已经着眼于加入两个别名子查询,加入两个视图,并尝试了一个巨大而又丑陋的全部在一个查询中,其中没有一个起作用。

我的问题很简单:

如何我可以选择deivce_names.name和他们匹配的型号和制造商?

+0

你必须加入你所有的5个表格。也许你应该重新设计它以减少表,至少在SQL中。 – 2013-03-04 03:43:14

回答

1
SELECT 
    name, manufacturer, model 
FROM 
    device_names 
    JOIN devices ON (device_names.id = name_id) 
    JOIN devices_generic ON (generic_device_id = devices_generic.id) 
    JOIN device_manufacturers ON (manufacturer_id = device_manufacturers.id) 
    JOIN device_models ON (model_id = device_models.id) 
+0

“错误代码:1066.不是唯一的表/别名:'device_manufacturers'” – 2013-03-04 03:42:40

+0

回答者忘记了别名。 'JOIN device_manufacturers dm1 ON(manufacturer_id = dm1.id) JOIN device_manufacturers dm2 ON(model_id = device_models.id)' – Patashu 2013-03-04 03:43:34

+0

@Patashu别名不是必需的;问题是我输入了“device_manufacturers”而不是“device_models”的最后一个表,但我已经在我的答案中更正了这一点 – 2013-03-04 03:47:35

0
select 
    device_names.name as device_name, 
    device_manufacturers.name as device_manufacturer_name, 
    device_models.name as device_model_name 
from deivce_names 
join device on device.name_id = deivce_names.id 
join devices_generic on devices_generic.id = devices.generic_device_id 
join device_manufacturers on devices_generic.manufacturer_id = device_manufacturers.id 
join device_models on device_models.id = devices_generic.model_id 
0

SELECT dm1.manufacturer, dm2.model from device_manufacturers as dm1 join devices_generic as dg on dg.manufacturer_id = dm1.id join device_models as dm2 on dm2.id = dg.model_id join devices as d2 on d2.generic_device_id = dg.id join device_names as dn on dn.id = d2.name_id where name = 'foo'

在未来,你可能想简单地把你的数据变成fiddle并且有它玩。