我正在为工作中的项目在 Oracle 中创建一个小型数据库。其中一列需要记录多个值。创建多值列的查询是什么?
问问题
1993 次
2 回答
5
如果您需要用户输入多个电子邮件地址,我会考虑创建一个USER_EMAIL
表来存储此类记录。
Create Table User_Email (User_Id int, Email varchar(100));
User_Id 将foreign key
返回到您的USER
表。
然后,您可以为每个用户拥有 1-n 个电子邮件地址。这通常是数据库规范化的最佳实践。如果您的电子邮件具有不同的类型(即工作、个人等),您可以在该表中为该类型设置另一列。
如果您需要返回单列中的行,则可以查看 using LISTAGG
:
select u.id,
listagg(ue.email, ', ') within group (order by ue.email) email_addresses
from users u
left join user_email ue on u.id = ue.user_id
group by u.id
于 2013-05-27T18:08:14.643 回答
1
您可以尝试在 Oracle 列中使用 VARRAY 列。
看这个页面:https ://www.orafaq.com/wiki/VARRAY
你可以在那里看到:
- 类型声明:
创建或替换类型 vcarray 作为 VARRAY(10) OF VARCHAR2(128);
- 表声明:
CREATE TABLE varray_table(id 号,col1 vcarray);
- 插入:
INSERT INTO varray_table VALUES (3, vcarray('D', 'E', 'F'));
- 选择:
选择 t1.id, t2.column_value
从 varray_table t1, TABLE(t1.col1) t2
WHERE t2.column_value = 'A' OR t2.column_value = 'D'
于 2019-06-13T12:12:57.857 回答