如何在此查询上进行内部联接

时间:2012-06-11 08:33:43

标签: mysql sql inner-join

我有这个问题:

SELECT hit.timestamp,hit.id,config.Name,hit.meter_id,levels.LevelName, pos.sm_pos , hit.hit_value 
FROM pos,hit,controllers,levels,config 
WHERE hit.id=config.id
AND hit.meter_id=levels.id 
AND pos.id=hit.id
AND pos.controller_id=controllers.id;

如何从中进行内部联接查询?使用别名还是什么?我正在寻找,我找不到任何多表查询。

2 个答案:

答案 0 :(得分:4)

您加入表格的方式现已过时。它使用得更早,现在我们使用像INNER/NATURAL/LEFT OUTER/RIGHT OUTER/CROSS等关键字来根据需求连接表。

Refer Join in Mysql

SELECT hit.timestamp, 
       hit.id, 
       config.Name, 
       hit.meter_id, 
       levels.LevelName, 
       pos.sm_pos, 
       hit.hit_value 
FROM   hit 
       INNER JOIN config 
               ON hit.id = config.id 
       INNER JOIN levels 
               ON hit.meter_id = levels.id 
       INNER JOIN POS 
               ON pos.id = hit.id 
       INNER JOIN controllers 
               ON pos.controller_id = controllers.id; 

注意:您发布的查询符合SQL-89标准,我发布的第二个查询符合SQL-92。
SQL-92标准引入了INNER JOIN .. ONOUTER JOIN .. ON以替换SQL-89的更复杂(?)语法。

答案 1 :(得分:1)

如果要重新格式化查询,可以这样做:

SELECT 
    H.timestamp,
    H.id,
    F.Name,
    H.meter_id,
    L.LevelName, 
    P.sm_pos, 
    H.hit_value 
FROM pos AS P
INNER JOIN controllers AS C ON P.controller_id = C.id
INNER JOIN hit AS H ON P.id = H.id
INNER JOIN levels AS L ON H.meter_id = L.id
INNER JOIN config AS F ON H.id =F.id;

请注意,我已经冒昧地在您的表名上添加别名,这可以简化您的查询。

要了解联接在MySQL中的工作原理,请阅读here in the manual。关于加入的一个很好的教程是由Jeff Atwood编写的,你可以找到它here