我正在使用Oracle通過SQL +命令行,我試圖顯示來自兩個不同表的數據,但我需要使用第三個表來確定要顯示的內容。下面是我的樣本3表格的圖像。基於另一個從兩個表中選擇數據
堆棧不會讓我告訴我的問題,所以這裏的圖像是一個鏈接:
我想顯示「名稱」,「O_ID」和「日期」每個訂單。我對SQL很陌生,以前可能已經回答過,但我找不到它。
我正在使用Oracle通過SQL +命令行,我試圖顯示來自兩個不同表的數據,但我需要使用第三個表來確定要顯示的內容。下面是我的樣本3表格的圖像。基於另一個從兩個表中選擇數據
堆棧不會讓我告訴我的問題,所以這裏的圖像是一個鏈接:
我想顯示「名稱」,「O_ID」和「日期」每個訂單。我對SQL很陌生,以前可能已經回答過,但我找不到它。
JOIN
表:
SELECT
c.Name,
o.O_ID,
od.Date
FROM Customer AS c
INNER JOIN "Order" AS o ON c.C_ID = o.C_ID
INNER JOIN OrderDate AS od ON o.O_ID = od.O_ID;
你所試圖做的是一個非常普遍的做法,需要一個INNER JOIN。 從設計角度來看,訂單日期表應該不存在。日期列應該位於訂單表中。我寫了基於該設計的查詢:
SELECT
o.O_ID,
o.Date,
c.Name,
FROM
customer AS c
INNER JOIN order AS o ON c.C_ID = o.C_ID
編輯:
更多關於你的設計的問題:你的數據的自然順序將有1個日期的順序,不訂單的日期很多。引入另一個表格來簡單地存儲日期可以讓潛在的許多日期與訂單相關聯,這很簡單,不自然。
也許有多個訂單日期?也許訂單可以添加到。 – 2013-04-09 14:47:33
@samyi聽起來更像修訂歷史,而不是增加訂單。在典型的生產環境中,您將使用審計表或類似CDC的東西來實現這一目標,因爲它是元數據。 – 2013-04-09 15:00:26
我只是建議你根據你以前看過的東西做出假設。我確實同意你的建議對我更有意義,但每個系統都有自己的一套要求。 – 2013-04-09 19:55:23
做一個JOIN
select c.Name, o.O_ID, od.Date
from Customer c
inner join Order o on o.O_ID = c.C_ID
inner join OrderDate od on o.O_ID = od_ID
這偉大的工作,比較容易的方式比我期待,非常感謝您的幫助! – Vistari 2013-04-09 14:59:24
@ user2262174 - 不客氣:) – 2013-04-09 15:11:44
line INNER JOIN「Order」AS o ON c.C_ID = o.O_ID 不應該是 INNER JOIN「Order」AS o ON c.C_ID = o。 C_ID ? – 2013-04-11 12:58:44