SQL加两个表选择方法

时间:2015-03-10 15:32:19

标签: sql select sqlplus create-table

这是我在SQL plus中所做的。到目前为止,我对此非常陌生:

CREATE TABLE u
();

CREATE TABLE a
();

基本上,用户可以将一个或多个头像链接到其电子邮件地址,但我想知道如何链接第二个表格中的头像并将其分配到第一个表格中的电子邮件地址,以这种方式如果我使用SELECT函数,我可以列出所有电子邮件地址为'EMAIL1@GRE.AC.UK'的头像。

2 个答案:

答案 0 :(得分:0)

select * 
from avatars
where id in ( select id from users where email = 'EMAIL1@GRE.AC.UK');

SELECT   avatars.*
FROM avatars 
INNER JOIN users
ON avatars.id = users.id
and users.email = 'EMAIL1@GRE.AC.UK'

答案 1 :(得分:0)

如果看起来两个表的ID字段应该包含相同用户的相同值,那么您已设置了1-1关系。每个用户可以拥有一个且只有一个头像。如果你想要多个头像,那么它必须有一个独立的ID和另一个UserID来引用用户。

create table Avatar(
    ID     NUMBER CONSTRAINT pk_email PRIMARY KEY,
    UserID number, 
    name   VARCHAR2(32),
    dateOfBirth DATE,
    strength NUMBER(9),
    gender VARCHAR2(7),
    hoard  INTEGER,
    constraint FK_Avatar_User foreign key( UserID )
        references User( ID )
);
create index IX_Avatar_User on Avatar( UserID, ID );

现在每个头像都拥有自己的ID值。每个头像只能分配给一个用户,但可以为许多头像输入相同的用户ID。该指数加快了访问速度。

然后显示分配给用户的头像:

select  U.ID UserID, U.email, A.ID AvatarID, A.Name AvatarName
from    Users U
join    Avatar A
    on  A.UserID = U.ID
where   U.ID = 123;  -- If you are only interested in one particular user.

顺便说一句,除非您在医院的托儿所工作,否则您会发现DateOfBirth很少为其定义默认值。如果在创建记录时不知道该详细信息,则NULLTODAY更受欢迎。