簡體   English   中英

如何在此查詢上進行內部聯接

[英]How to make inner join on this query

我有這個查詢:

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;

如何從中進行內部聯接查詢? 有別名還是什么? 我一直在尋找,但找不到用於多表查詢的任何內容。

現在,您聯接表的方式已經過時了。 它使用較早,現在我們根據需要使用INNER/NATURAL/LEFT OUTER/RIGHT OUTER/CROSS等關鍵字來聯接表。

在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標准引入了INNER JOIN .. ONOUTER JOIN .. ON ,以替換SQL-89的更復雜的(?)語法。

如果要重新格式化查詢,可以這樣進行:

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)寫了一篇有關聯接的很好的教程,您可以在這里找到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM