0

我正在为工作中的项目在 Oracle 中创建一个小型数据库。其中一列需要记录多个值。创建多值列的查询是什么?

4

2 回答 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

你可以在那里看到:

  1. 类型声明:

创建或替换类型 vcarray 作为 VARRAY(10) OF VARCHAR2(128);

  1. 表声明:

CREATE TABLE varray_table(id 号,col1 vcarray);

  1. 插入:

INSERT INTO varray_table VALUES (3, vcarray('D', 'E', 'F'));

  1. 选择:

选择 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 回答