0

我有这个查询:

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;

如何从中进行内部连接查询?有别名什么的?我一直在寻找,但找不到多表查询的任何内容。

4

2 回答 2

4

您加入表格的方式现在已经过时了。以前使用过,现在我们INNER/NATURAL/LEFT OUTER/RIGHT OUTER/CROSS根据需求使用关键字 like 等来连接表格。

参考 Mysql 中的 Join

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 标准是为了替换 SQL-89 中更复杂的(?)语法INNER JOIN .. ONOUTER JOIN .. ON

于 2012-06-11T08:36:34.627 回答
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 中的工作方式,请在手册中阅读有关它的内容。Jeff Atwood 写了一个关于连接的好教程,你可以在这里找到它。

于 2012-06-11T08:43:28.587 回答