【发布时间】:2018-08-28 18:35:40
【问题描述】:
假设我有一个包含四个用户的 USERS 表:
+----+-------+
| id | login |
+----+-------+
| 1 | guest |
| 2 | admin |
| 3 | alice |
| 4 | bob |
+----+-------+
我想将它与任意属性列表结合起来。假设我的列表是:'alice'、'bob'、'charles'、'dan'。我想写一个看起来像这样的选择(然后插入另一个表)。
+----+-------+-------------+
| id | login | friend_name |
+----+-------+-------------+
| 1 | guest | alice |
| 2 | admin | bob |
| 3 | alice | charles |
| 4 | bob | dan |
+----+-------+-------------+
当前尝试:
SELECT u.id,
u.name,
vals.column_value
FROM users u
INNER JOIN TABLE(sys.odcivarchar2list('alice', 'bob', 'charles', 'dan')) vals
ON vals.column_value IS NOT NULL ;
仅,这将创建一个笛卡尔积。结果将包括每个用户的四行:
+----+-------+-------------+
| id | login | friend_name |
+----+-------+-------------+
| 1 | guest | alice |
| 1 | guest | bob |
| 1 | guest | charles |
| 1 | guest | dan |
| 2 | admin | alice |
| 2 | admin | bob |
| 2 | admin | charles |
| 2 | admin | dan |
| 3 | alice | alice |
| 3 | alice | bob |
| 3 | alice | charles |
| 3 | alice | dan |
| 4 | bob | alice |
| 4 | bob | bob |
| 4 | bob | charles |
| 4 | bob | dan |
+----+-------+-------------+
这个不起作用,但这是我想做的:
SELECT u.id,
u.name,
vals.column_value
FROM users u
INNER JOIN TABLE(sys.odcivarchar2list('alice', 'bob', 'charles', 'dan')) vals
ON vals.rownum = u.rownum ;
当然不行,因为两张表都没有rownum属性。
如何编写一个 select 将值列表插入到 select 的列中而不将它们相乘?
【问题讨论】: