2012-08-01 101 views
2

我有如下語句:sql server - 如何修改查詢語句中的值?

select lastname,firstname,email,floorid 
from employee 
where locationid=1 
    and (statusid=1 or statusid=3) 
order by floorid,lastname,firstname,email 

的問題是列floorid。此查詢的結果顯示了樓層的ID。

這張桌子叫做floor(有30行),裏面有列id和floornumber。 floorid(在上面的語句中)值與桌面的ID相匹配。

我希望上述查詢將floorid值切換到樓層表中的floornumber列的關聯值。

任何人都可以告訴我如何做到這一點嗎? 我正在使用Microsoft sql server 2008 r2。

我是新來的sql,如果可能,我需要一個清晰易懂的方法。

+3

不要給你一個直接的答案,讓我建議你閱讀'join'。數據庫中的優勢不在於存儲數據,它能夠創建相關數據,然後可以檢索。爲了檢索相關數據,您可以按照您想要的任何列/標準「加入」。這是RDBMS(R = Relational)的基本方面之一,所以它只是一個熟悉可用工具的問題(我建議在線閱讀一些教程,可能是一兩本書)。 – SPFiredrake 2012-08-01 15:08:34

回答

1

如果floorid與您的地板表的ID相匹配,您必須進行簡單的連接檢查。然後你使用桌面的floornumber。

select a.lastname,a.firstname,a.email,b.floornumber 
from employee a 
join floor b on a.floorid = b.id 
where a.locationid=1 and (a.statusid=1 or a.statusid=3) 
order by a.floorid,a.lastname,a.firstname,a.email 
+0

感謝這工作 – omega 2012-08-01 15:16:20

+0

@omega你應該參考我的答案,如果你需要更多的信息,這是如何工作的。 – phadaphunk 2012-08-01 15:20:24

+0

我還有一個問題,如果employee表中的floorid值是NULL,那麼該行就會被跳過,因爲樓層表中沒有名爲NULL的id。我怎樣才能得到這個包含在查詢中的值應該保持NULL? – omega 2012-08-01 16:02:40

5
select lastname, 
     firstname, 
     email, 
     floor.floornumber 
from  employee 
inner join floor on floor.id = employee.floorid 
where locationid = 1 
     and (statusid = 1 or statusid = 3) 
order by floorid, lastname, firstname, email 
1

您需要使用join
這將加入一個特定領域的兩個表。
這樣你可以從SELECT列當中的多個表。

當你加入兩個表時,你必須指定你想加入他們的列。
在你的榜樣,你必須這樣做:
from employee join floor on employee.floorid = floor.id

既然你是新的SQL您必須知道的幾件事情。用這個問題的其他enaswers,人們使用aliases而不是重複表名稱。
from employee a join floor b
意味着從現在起桌上僱員將被稱爲a並且桌面爲b。當你有很多連接要做時,這真的很有用。

現在讓我們假設兩個表都有一列name。在你的選擇中,你必須說你想從哪個表中選擇列名。如果你只寫這個
SELECT name from Employee a join floor b on a.id = b.id
編譯器不會明白你想從哪個表中獲得列name。你將不得不像這樣指定它:
SELECT Employee.name from Employee a join floor b on a.id = b.id
或者如果你喜歡用別名:
SELECT a.name from Employee a join floor b on a.id = b.id

最後有很多類型的聯接。

  • 內連接(使用的是什麼,因爲只需鍵入Join將引用內部連接。
  • LEFT OUTER JOIN
  • 右外連接
  • 自加入
  • ...

要應參照this article about joins知道如何正確地使用它們。
希望這會有所幫助。