2013-02-07 103 views
0

這裏是我的數據庫結構(基本關係): DataBase StructureSQL查詢來填充基於主表的PK臺被連接

我試圖制定一個行查詢將填充clients_ID,JOB_ID ,tech_id,& Part_id和返回目前所有工作訂單。沒有什麼比這更少。

到目前爲止,我已經努力產生此查詢:

SELECT  cli.client_name, tech.tech_name, job.Job_Name, w.wo_id, w.time_started, w.part_id, w.job_id, w.tech_id, w.clients_id, part.Part_name 
FROM work_orders as w, technicians as tech, clients as cli, job_types as job, parts_list as part 
LEFT JOIN technicians as techy ON tech_id = techy.tech_name 
LEFT JOIN parts_list party ON part.part_id = party.Part_Name 
LEFT JOIN job_types joby ON job_id = joby.Job_Name 
LEFT JOIN clients cliy ON clients_id = cliy.client_name 

顯然,一旦所有的加盟恰好根據自己的參考它甚至不填充正確的外鍵值。

  • [一些價值出來的實際的外鍵ID,甚至沒有 相應的值。]

    它只是對視,我有一個表的最大行約20-30倍(以上之一)。

我只創建兩項工作訂單,因此理想情況下,應該只返回兩條記錄,與列和字段與正確的信息。我可能做錯了什麼?沒有太久,但我儘可能地學習MySQL。

回答

1

你的加入條件是錯誤的。加入tech_id = tech_id,而不是tech_id = tech_name。看起來你對所有連接都這樣做,所以他們都需要修復。

我真的不關注你的問題的文字,所以我只根據你的查詢來回答我的答案。

編輯

回覆您的評論在這裏。你說你想「加載」技術名稱列。我假設你的意思是你希望技術名稱成爲你的結果集的一部分。

查詢的SELECT部分​​決定了結果集中的列。只要在FROM/JOIN子句中引用列所在的表,就可以從該表中選擇任何列。

將JOIN語句想象爲基於另一個表中的值「查找」一個表中的值的方法。這是一個非常簡化的定義,但它是開始思考它的好方法。您需要在結果集中使用技術名稱,所以您可以在技術人員表中查看它的位置。但是,您想通過工作訂單表中的值查找它。您在工作訂單表中將技術人員表與其關聯的鍵(實際上稱爲外鍵)是tech_id。您可以使用tech_id在Technicians表中查找相關行,這樣做可以在結果集中包含該表中的任何列。

+0

那麼,我想加載tech_table,它是tech_table中的一列。如果你知道我的意思,只需加載Tech_id即可? – Bain

+0

我修改了我的答案以回覆您的評論,因爲它很長。 –