2014-03-31 68 views
-2

我想查詢四個表如下:SQL服務器 - 查詢與加入和多發的條件

表1:用戶

User | Name 
------------- 
01 | Phil 
------------- 
02 | John 
------------- 
03 | Marc 
------------- 
04 | Rob 

訂單:整數和增量/名稱:VARCHAR

表2:狀態

Status | Description 
-------------------- 
    01 | Canceled 
-------------------- 
    02 | Confirmed 
-------------------- 
    03 | Bulding 
-------------------- 
    .. | ..... 
-------------------- 
    15 | Finished 

現狀:整數和增量/描述:VARCHAR

表3:建立

Order | Date | Place 
---------------------------- 
    01 | 01/01/2014 | MG 
---------------------------- 
    02 | 02/02/2014 | SP 
---------------------------- 
    05 | 03/03/2014 | BA 

訂購:整數/日期:日期/地點:的Varchar

表4:訂單

Order | User | Status 
----------------------- 
01 | 02 | 01 
----------------------- 
02 | 01 | 11 
----------------------- 
03 | 03 | 15 
----------------------- 
04 | 01 | 03 
----------------------- 
05 | 04 | 02 

排序:Integer and Incremental/Us整數/狀態:整數

我必須查詢表4以顯示所有訂單(狀態1,15除外)加入表01,表02和表03按日期在表03中排序。問題是表03並不總是與訂單號有關,並且此訂單不會在查詢中顯示。

我需要這樣一個結果:

查詢結果

Order | User | Name | Status | Description | Date  | Place 
---------------------------------------------------------------- 
02 | 01 | Phil | 11 | Painting | 02/02/2014 | SP 
---------------------------------------------------------------- 
05 | 04 | Rob | 02 | Confirmed | 03/03/2014 | BA 
---------------------------------------------------------------- 
04 | 01 | Phil | 03 | Bulding |   | 

感謝您的幫助!

+1

這看起來像一個學校的作業。 –

回答

0

對錶3使用「LEFT OUTER JOIN」。這將返回其他表中的所有記錄,表3中的匹配,並且如果表3不匹配,它將顯示爲空白。

例如:

SELECT * 
FROM Orders 
LEFT OUTER JOIN Build ON Order.Order = Build.Order 

這將返回所有的結果令,並從構建的比賽。請注意,要保留所有記錄的表必須位於ON語句的左側(ON Order.Order = Build.Order)。

更多信息:http://technet.microsoft.com/en-us/library/ms187518%28v=SQL.105%29.aspx

+0

嗨,吉姆,謝謝你的解決,這解決了我的問題,加入空行,但其餘的像條件NOT狀態01或15,加入其他表格,並通過Build.Date命令結果... – Pmoshbr

+0

我試過更多的代碼和達到的結果與此查詢:SELECT Order.Order,Order.User,User.Name,Order.Status,Status.Description,Build.Date,Build.Place FROM用戶,狀態,訂單 左外部加入構建ON Order.Order = Build.Order WHERE Order.Status <> 01 AND Order.Status <> 15 AND Order.Client = User.User AND Order.Status = Status.Status 順序按Build.Order說明 – Pmoshbr