我有这个问题:
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;
如何从中进行内部联接查询?使用别名还是什么?我正在寻找,我找不到任何多表查询。
答案 0 :(得分:4)
您加入表格的方式现已过时。它使用得更早,现在我们使用像INNER/NATURAL/LEFT OUTER/RIGHT OUTER/CROSS
等关键字来根据需求连接表。
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 .. ON
和OUTER 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。