Oracle SQL将多个值从另一个表/行返回到另一个表中的单个字段

时间:2016-04-19 16:27:18

标签: database oracle

我正在尝试完成数据库最终项目,我需要为Web论坛创建数据库。只是数据库工作,而不是PHP / HTML /等。

对于这个例子,我们很难将用户编码到代码中,因为我们没有使用变量。对于我的例子,我将使用User_ID 2。 我坚持要求。我需要创建一个列出用户个人资料及其兴趣的视图。因此,字段名称,如Username,F_Name,L_Name等。 我的问题是,用户的“兴趣”存储在另一个表中。我需要一个基本上显示如下的视图:

Users.Username   Users.F_Name   Users.L_Name   Users.Joined (VARCHAR2)   Users.Signature   Users.Website   INTERESTS

我希望它能返回如下:

"JSmith" "John", "Smith", "1/1/2016", "SigHere", "www.example.com, "Music, Movies, Tech" With the entire list of interests all within one field of the view.

兴趣表如下所示:

INTEREST_ID    USER_ID CATEGORY_ID
  1              2       1
  2              2       2
  3              2       3
  4              3       1
  5              3       2
  6              4       2
  7              5       1
  8              5       2
  9              5       3

分类表是:

CATEGORY_ID   NAME       DESCRIPTION
  1           Music          All about them Jamz!
  2           Electronics    Tech Talk
  3           Movies         The BIG screen

用户表是:

User_ID     Integer         NOT NULL,
Username    VARCHAR2(60)    NOT NULL,
Password    VARCHAR2(60),
Email       VARCHAR2(255),
F_Name      VARCHAR2(20)    NOT NULL,
L_Name      VARCHAR2(20)    NOT NULL,
Joined      VARCHAR2(10),
Level_ID    INTEGER         NOT NULL,
Signature   VARCHAR2(255),
Website     VARCHAR2(60)

创建表用户

User_ID     Integer         NOT NULL,
Username    VARCHAR2(60)    NOT NULL,
Password    VARCHAR2(60),
Email       VARCHAR2(255),
F_Name      VARCHAR2(20)    NOT NULL,
L_Name      VARCHAR2(20)    NOT NULL,
Joined      VARCHAR2(10),
Level_ID    INTEGER         NOT NULL,
Signature   VARCHAR2(255),
Website     VARCHAR2(60)

我尝试了这个命令,但当我尝试从中选择*时,它返回“单行子查询返回多行”,我理解为什么。只是无法弄清楚如何让它做我想做的事情。它甚至可能吗?

CREATE or REPLACE VIEW Profile AS
SELECT Users.Username, Users.F_Name, Users.L_Name, Users.Joined, Users.Website, 
(SELECT UserInterested.Category_ID FROM UserInterested) AS InterestList
FROM Users
WHERE Users.User_ID = 2;

1 个答案:

答案 0 :(得分:0)

尝试查看http://www.oracle-developer.net/display.php?id=515处的listagg()函数。您将需要为两个users.user_id = interests.user_id加入兴趣表(如果您想要显示用户即使他是“不感兴趣”,也可以加入左连接)和interests.category_id = categories.category_id。