2016-04-14 42 views
1

如果我有4個表(Army, Navy, Air Force, Marines),則全部具有serial number作爲主鍵,並且name。我有一個表operation其中有op_num作爲主鍵和op_name。我還有一個表operation member,它將操作表與其他4個表關聯起來,我如何編寫單個SQL語句,使用Microsoft T返回祕密操作「Desert Storm」的成員名稱(與服務分支無關) -SQL語法?SQL Server中的關聯表

回答

1

鑑於您的關聯表看起來像這樣

Operation_Member (op_num, ser_num) 

下面的查詢應返回所需的結果:

SELECT Soldier.Name FROM Operation_Member 
INNER JOIN Operation 
    ON Operation.op_num = Operation_Member.op_num 
INNER JOIN 
(
    SELECT ser_num, name FROM Army 
    UNION ALL 
    SELECT ser_num, name FROM Navy 
    UNION ALL 
    SELECT ser_num, name FROM Air_Force 
    UNION ALL 
    SELECT ser_num, name FROM Marines 
) Soldier 
    ON Soldier.ser_num = Operation_Member.ser_num 
WHERE Operation.op_name = 'Desert Storm' 
+0

謝謝你很多。對不起,我新來的SQL。什麼是士兵?因爲我沒有表戰士 – Sarah

+0

Solider只是一個別名。它可以是任何字符串,即所有。而不是Solider,你可以把S放在任何地方,它會工作 – Arulkumar

+0

@Sarah,爲了加入所有四個表格,我們必須在這裏創建一個派生表格,'聯合'所有這些表格 - 這是括號內的查詢。由於它是一種'虛擬'表格,我們必須給它一個別名來在我們的外部查詢中引用它。派生表的別名在右括號(')Soldier')後添加。 –