【问题标题】:Oracle SQL to return multiple values from another table/rows into single field in another tableOracle SQL将另一个表/行中的多个值返回到另一个表中的单个字段中
【发布时间】:2016-04-20 06:16:42
【问题描述】:

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

对于本示例,我们将用户硬编码到代码中,因为我们没有使用变量。对于我的示例,我将使用 User_ID 2。 我被困在一个要求上。我需要创建一个列出用户个人资料和兴趣的视图。因此,字段名称,如用户名、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;

【问题讨论】:

    标签: database oracle


    【解决方案1】:

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

    【讨论】:

    • 谢谢!我最终没有为该项目使用子查询。该视图多次重复用户名,但讲师说这很好(程序员会剥离它)。但是,它一直困扰着我,我想弄清楚。我会试一试,看看会发生什么!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 2017-10-16
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    相关资源
    最近更新 更多