0
我正在構建一個包含車輛組件的數據庫。有三個表:如何在多個表上運行SQL查詢
- 車輛表(車輛的清單,每一個車輛具有唯一的ID號)輪胎
- 輪胎表(列出的序列號(SN)和零件號(PN)與沿,它的安裝(ID))
- 篩選表車輛(列出的序列號(SN),用於與它的安裝上(ID))
我會車輛沿着過濾器和部件號(PN)喜歡創建一個Access SQL查詢,它爲所有的過濾器提供序列號和零件號安裝在特定車輛上的輪胎(假設我們正在搜索車輛ID爲5的本田思域)。我創建了下面的代碼,但它返回了所有結果的笛卡爾乘積。每輛車上都安裝了兩個過濾器和兩個輪胎,以便在結果合併和複製時返回以下結果。
- 輪胎1(PN and SN)|過濾器1(PN和SN)
- 輪胎1(PN和SN)|過濾器2(PN和SN)
- 輪胎2(PN和SN)|過濾器1(PN和SN)
- 輪胎2(PN和SN)|過濾器2(PN和SN)
反正是有,我可以創建一個查詢將返回:
- 輪胎1(PN和SN)
- 輪胎2(PN和SN)
- 過濾器1(PN和SN)
- 濾波器2(PN和SN)
我的代碼是下面:
SELECT DISTINCT Tires.SN, Tires.PN, Tires.ID, Filters.ID, Filters.PN, Filters.SN,
Vehicle.ID
FROM (Vehicle
INNER JOIN Filters ON Vehicle.[ID] = Filters.[ID])
INNER JOIN Tires ON Vehicle.[ID] = Tires.[ID]
WHERE Vehicle.[ID] = 5;
謝謝!
你的數據不是很標準化的,因爲輪胎和filgers有相同的數據(至少在你的例子中,最好只有一個表,並定義組件是「輪胎」還是「過濾器」,這樣你就不必從兩者中進行選擇)另外,如果你以後決定添加「帶」,你不必寫更多的查詢,數據將驅除額外的組件。 – xQbert 2013-03-12 00:13:20
要回答你的問題,儘管它可以使用當前模式來完成,但是我們必須使得assu每輛車總是有2個輪胎和2個過濾器,並且過濾器的內徑較低與同一輛車的輪胎內徑較低有關。如果隨着時間的推移將要擴展數據庫,這將變得越來越難以維護。 – xQbert 2013-03-12 00:20:37
爲什麼你需要他們作爲列?它不像xQbert所說的那樣是可擴展的。只要選擇它們作爲組合結果集的行。 – peterm 2013-03-12 00:23:27