使用没有主键的主键选择语句
好吧,所以我有一个在我的数据库中的笔记和我的数据库中的用户表。比方说,笔记表看起来像这样:使用没有主键的主键选择语句
NoteId NoteTitle NoteAuth
--------------------------------
1 TempTitle 254
2 TempTitle2 871
和用户表如下所示:
UserId UserName
-------------------
254 Bob
871 Jim
我怎样才能从注表中选择,但选择NoteAuth从用户表中的用户名。基本上,如何在没有在表上设置主键的情况下使用主键。
你可以尝试这样的事情
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
是的,但我想给记的ID来选择,然后选择字鲍勃,甚至。尽管我的选择实际上会给我254. – 2010-11-12 18:59:53
Join和Inner Join有什么区别?您使用Join,而另一个答案使用内部连接。为什么这个决定? – 2010-11-12 19:08:52
INNER JOIN和JOIN在这种情况下是等价的。但是,您没有指出您正在使用哪个DBMS,所以我应该包含INNER关键字以避免混淆。 – bobs 2010-11-12 19:11:43
SELECT NoteID, NoteTitle, UserName
FROM Notes INNER JOIN Users ON Notes.NoteAuth = Users.UserID
有对存在任何按键的加入以使用一列没有要求。
select n.NoteId, n.NoteTitle, n.NoteAuth, u.UserName
from Notes n
inner join User u on n.NoteAuth = u.UserID
再次检查。 。 。 – 2010-11-12 18:57:34
缺少主键会导致缺乏表完整性。现在,您将无法在表格之间创建外键。这意味着你将被允许创建一个用户在Users表中不存在的笔记。
这不会
SELECT n.NoteTitle, u.UserName
FROM NoteTable n LEFT JOIN Users u ON n.NoteAuth = u.UserId
这将在SqlServer的工作阻止你。
问题是,如果你有一个NoteAuth不存在于用户表中的笔记,那么你最终会得到一个NULL用户名。使用ISNULL将NULL替换为“没有用户名”。
但就像我说过的,表格之间没有任何完整性。
SELECT U.Username, N.NoteTitle from Notes N, Users U WHERE N.NoteAuth = U.UserId
一个值得注意的SQL大师说:*如果它没有主键,这不是一个表* – 2010-11-12 19:52:20