2016-04-19 3 views
0

Я пытаюсь завершить окончательный проект базы данных, где мне нужно создать базу данных для веб-форума. Просто работа с БД, а не PHP/HTML/и т. Д.Oracle SQL для возврата нескольких значений из другой таблицы/строк в одно поле в другой таблице

В этом примере мы жестко кодируем пользователя в код, так как мы не используем переменные. Для моего примера я буду использовать 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) 

CREATE TABLE Пользователи

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; 

ответ

0

Попробуйте функцию listagg() по адресу http://www.oracle-developer.net/display.php?id=515. Вам нужно будет присоединиться к таблице интересов для users.user_id = интересов.user_id (Left join, если вы хотите отобразить пользователя, даже если он «неинтересен») и интересов.category_id = categories.category_id.

+0

Спасибо! Я не использовал подзапрос для проекта. Представление повторило имя пользователя несколько раз, но инструктор сказал, что все в порядке (программист разделил бы его). Тем не менее, это прослушивало меня, и я хотел понять это. Я сделаю это и посмотрю, что произойдет! Благодаря! –

Смежные вопросы