2016-07-29 59 views
0

我有一個名爲tbl_PO的表和另一個名爲tbl_PO_LineItems的表。在tbl_PO中,相關字段是'PO#'和'狀態'。 '狀態'字段有幾個選項,我們現在感興趣的是「關閉」。每個採購訂單都有很多訂單項,因此tbl_PO中的PO#和tbl_PO_LineItems中的PO#存在一對多關係。 tbl_PO_LineItems中有一個名爲'LineNum'的字段,它是訂單項編號。還有另外一個叫'代碼'的字段,它是PO#和LineNum的組合。我知道這是一個組合字段,但它使數據庫的其餘部分的數據流更加容易。如何根據父表中的值從子表中選擇項目?

在不同的表,稱之爲tbl_table3,我希望能夠沿着這個線路使用的SQL語句:

SELECT Code FROM tbl_PO_LineItems WHERE tbl_PO.Status = 'Closed'

的問題是,有從代碼到沒有直接的聯繫tbl_PO中的任何字段。我需要通過與該代碼關聯的PO#以從該PO#的tbl_PO中獲取狀態值。我怎樣才能做到這一點?我在JOIN命令中讀了一下,但我對它不太滿意。

任何幫助表示讚賞。

回答

2

使用INNER JOIN

SELECT t1.PO_num, t2.Code 
FROM tbl_PO t1 
INNER JOIN tbl_PO_LineItems t2 
    ON t1.PO_num = t2.PO_num 
WHERE t1.Status = 'Closed' 

我不知道我對組合的列Code多麼瘋狂,但沒有更多的信息,我不能做任何改進的建議。

+0

它獨特的領域,考慮它是每個訂單項的ID,只是我們選擇了命名約定,以便在多個其他表中選擇代碼時使用,因此我們知道它是什麼,因爲它是由PO#組成的。你也可以解釋你的代碼中發生了什麼?不知道t1和t2是什麼。 – Michael

+1

@Michael't1'和't2'是表_aliases_。它們可以用來代替完整的表名,這可以使查詢更具可讀性。 –

+0

語法:select aliasName.columnName FROM tableName aliasName; – akhilsk

0

這裏有一些選項適合你一個加入,一個沒有加入。讓我知道這是你在問什麼。(我寫這關我的頭頂部,但它應該運行)

SELECT * --you can choose your columns here 
FROM tbl_PO AS PO, tbl_PO_LineItems AS LineItems 
WHERE PO.ID = LineItems.PONumber 
AND LineItems.Status = 'Closed 

或加入

SELECT * 
FROM tbl_PO AS PO 
JOIN tbl_PO_LineItems AS LineItems 
ON LineItems.PONumber = PO.ID 
AND LineItems.Status = 'Closed 
相關問題