使用没有主键的主键选择语句

时间:2010-11-12 18:53:33

标签: sql

好的,我的数据库中有一个表格,我的数据库中有一个表格。让我们说注释表看起来像这样:

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

和Users表看起来像:

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

如何从Note表中选择,但从Users表中选择NoteAuth作为UserName。基本上如何在没有在表上设置主键的情况下使用主键。

5 个答案:

答案 0 :(得分:4)

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

在JOIN中使用列不需要任何密钥。

答案 1 :(得分: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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

缺少主键会导致表缺乏完整性。现在,您将无法在表之间创建外键。这意味着您可以继续使用Users表中不存在的用户创建注释。

这不会阻止你

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

这将在SqlServer中有效。

问题是,如果你有一个注释,其中有一个在用户表中不存在的NoteAuth,你最终会得到一个NULL用户名。使用ISNULL将NULL替换为“No Username”。

但就像我说的那样,表之间不会有任何完整性。

答案 4 :(得分:0)

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