2010-11-12 82 views
1

好吧,所以我有一個在我的數據庫中的筆記和我的數據庫中的用戶表。比方說,筆記表看起來像這樣:使用沒有主鍵的主鍵選擇語句

NoteId NoteTitle NoteAuth 
-------------------------------- 
1  TempTitle 254 
2  TempTitle2 871 

和用戶表如下所示:

UserId UserName 
------------------- 
254  Bob 
871  Jim 

我怎樣才能從注表中選擇,但選擇NoteAuth從用戶表中的用戶名。基本上,如何在沒有在表上設置主鍵的情況下使用主鍵。

+0

一個值得注意的SQL大師說:*如果它沒有主鍵,這不是一個表* – 2010-11-12 19:52:20

回答

3

你可以嘗試這樣的事情

SELECT Notes.NoteId, Notes.NoteTitle, Notes.NoteAuth 
FROM Notes 
INNER JOIN Users ON Notes.NoteAuth = Users.UserId 
WHERE Users.UserName = 'Bob' 

編輯

下面是用於指定註釋的作者返回用戶名的版本。

SELECT Users.UserName, Notes.NoteId, Notes.NoteTitle, Notes.NoteAuth 
FROM Notes 
INNER JOIN Users ON Notes.NoteAuth = Users.UserId 
WHERE Notes.NoteAuth = 254 
+0

是的,但我想給記的ID來選擇,然後選擇字鮑勃,甚至。儘管我的選擇實際上會給我254. – 2010-11-12 18:59:53

+0

Join和Inner Join有什麼區別?您使用Join,而另一個答案使用內部連接。爲什麼這個決定? – 2010-11-12 19:08:52

+0

INNER JOIN和JOIN在這種情況下是等價的。但是,您沒有指出您正在使用哪個DBMS,所以我應該包含INNER關鍵字以避免混淆。 – bobs 2010-11-12 19:11:43

4
SELECT NoteID, NoteTitle, UserName 
    FROM Notes INNER JOIN Users ON Notes.NoteAuth = Users.UserID 

有對存在任何按鍵的加入以使用一列沒有要求。

2
select n.NoteId, n.NoteTitle, n.NoteAuth, u.UserName 
from Notes n 
inner join User u on n.NoteAuth = u.UserID 
+0

再次檢查。 。 。 – 2010-11-12 18:57:34

2

缺少主鍵會導致缺乏表完整性。現在,您將無法在表格之間創建外鍵。這意味着你將被允許創建一個用戶在Users表中不存在的筆記。

這不會

SELECT n.NoteTitle, u.UserName 
FROM NoteTable n LEFT JOIN Users u ON n.NoteAuth = u.UserId 

這將在SqlServer的工作阻止你。

問題是,如果你有一個NoteAuth不存在於用戶表中的筆記,那麼你最終會得到一個NULL用戶名。使用ISNULL將NULL替換爲「沒有用戶名」。

但就像我說過的,表格之間沒有任何完整性。

0
SELECT U.Username, N.NoteTitle from Notes N, Users U WHERE N.NoteAuth = U.UserId