oracle 表combine,Oracle: Combine arbitrary list with select from a table

Let's just say I have a USERS table with four users in it:

+----+-------+

| id | login |

+----+-------+

| 1 | guest |

| 2 | admin |

| 3 | alice |

| 4 | bob |

+----+-------+

I want to combine it with an arbitrary list of attributes. Say my list is: 'alice', 'bob', 'charles', 'dan'. I'd like to write a select which looks like this (to then insert into another table).

+----+-------+-------------+

| id | login | friend_name |

+----+-------+-------------+

| 1 | guest | alice |

| 2 | admin | bob |

| 3 | alice | charles |

| 4 | bob | dan |

+----+-------+-------------+

Current attempt:

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 ;

Only, this will create a Cartesian product. The result will include four rows for each user:

+----+-------+-------------+

| 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 |

+----+-------+-------------+

This one doesn't work but it's what I'd like to do:

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 ;

Of course, it doesn't work because, the two tables do not have a rownum attribute.

How can I write a select which inserts a list of values into a column on a select without multiplying these out?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值