2014-01-10 64 views
1

基本上,我的表格很像下面的圖片。Sql通過使用其他表格值進行選擇

enter image description here

起初我越來越SaleOrderID給出客戶ID:

Select 
    SaleOrderID 
From tblSaleOrder 
where CustomerID = 512992 

它返回,1002,1003,1005,1009

而且我想利用它來選擇號碼來自tblSaleOrderDetail:

Select 
    * 
from tblSaleOrderDetail 
where SaleOrderID = 1002,1003,1005,1009 

(來自其他qu )

我需要建議查詢使用其他選擇的值。有沒有辦法創建數組來保存值然後用於其他查詢?或更簡單的方法!

+1

如果我是你,我會看'JOIN','IN'和'EXISTS'。 – Zane

回答

4

in子句中使用子查詢:

select * 
from tblSaleOrderDetail 
where SaleOrderID in (
    select SaleOrderID 
    from tblSaleOrder 
    where CustomerID = 512992) 

當使用條款內的子查詢記住,你只能選擇子查詢中的一列。

你也可以執行聯接:

select * 
    from tblSaleOrderDetail sod 
    join tblSaleOrder so 
    on sod.SaleOrderId = so.SaleOrderId 
    where so.CustomerID = 512992 
+0

謝謝,我試過了「in」,它的工作完美無瑕。 –

+0

@OzanAyten很高興能幫到你! –

+0

我認爲一個簡單的JOIN可以用更簡單的SQL解決這個問題。 –

3

這是一個非常基本的SQL操作,稱爲join。雖然你可以使用in用於此目的,比較典型的方式是:

select sod.* 
from tblSaleOrder so join 
    tblSaleOrderDetail sod 
    on so.SaleOrderID = sod.SaleOrderID 
where so.CustomerID = 512992; 

如果你正在學習SQL,則join操作是你應該學習的第一件事。

+0

謝謝,我會研究它。 –

1

大概在這個帖子上有點矯枉過正,因爲問題是相當基本的,但我想給你一個選項列表以及一些基本的建議。最簡單的方法之一是使用IN子句。從概念上講,IN條款的作用與=相似,只是它會查找項目列表。

Select 
    * 
from tblSaleOrderDetail 
where SaleOrderID IN 
    (
    Select 
     SaleOrderID 
    From tblSaleOrder 
    where CustomerID = 512992 
    ) 

又一種方式來完成,這是通過使用EXISTS。這聽起來很像它檢查另一個表中存在的行。

Select 
    * 
from tblSaleOrderDetail AS SOD 
where EXISTS 
    (
    Select 
     1 
    From tblSaleOrder AS SO 
    where CustomerID = 512992 
    AND SOD.SaleOrderID = SO.SaleOrderID 
    ) 

請注意,我如何使用AS SO和SOD來爲這些表格提供新名稱。這被稱爲別名,它是你的朋友。我強烈建議在將來的查詢中使用它。

你也可以使用JOIN,但是當我開始寫這個時,已經有一個這樣的例子。

+0

感謝您的建議,這是有益的。 :) –

相關問題