如何在SQL中连接来自不同列的数据
有人能一步一步地给我解释一下我怎么能做这种练习吗 假设我有两张桌子如何在SQL中连接来自不同列的数据,sql,oracle,Sql,Oracle,有人能一步一步地给我解释一下我怎么能做这种练习吗 假设我有两张桌子 用户[id,用户名,图书id] 书[id、标题、日期] 如何获得此结构: [user_name, list_of_book_and_dates]. 差不多 John | book1 at 10.10.2019, book2 at 15.15.2019 似乎您需要一个listag函数- SELECT U.user_name, LISTAGG(B.title || 'at' || B.date, ',') WITHIN G
- 用户[id,用户名,图书id]
- 书[id、标题、日期]
[user_name, list_of_book_and_dates].
差不多
John | book1 at 10.10.2019, book2 at 15.15.2019
似乎您需要一个listag函数-
SELECT U.user_name, LISTAGG(B.title || 'at' || B.date, ',') WITHIN GROUP (ORDER BY B.date)
FROM users U
JOIN book B ON U.book_id = B.id
GROUP BY U.user_name
如果严格需要使用递归CTE方法,可以使用-
WITH TMP AS (SELECT U.user_name, B.title || 'at' || B.date book_detail, ROW_NUMBER() OVER (PARTITION BY user_name) RN
FROM users U
JOIN book B ON U.book_id = B.id),
cte AS (SELECT user_name, book_detail, RN
FROM TMP
WHERE RN = 1
UNION ALL
SELECT T.user_name, C.book_detail || ', ' || T.book_detail, C.RN+1
FROM TMP T
JOIN cte C ON U.id = C.id
WHERE T.user_name = C.user_name
and C.RN + 1 = T.rn)
SELECT user_name, book_detail
FROM cte C1
WHERE RN = (SELECT MAX(RN)
FROM cte C2
WHERE C1.user_name = C2.user_name)
非常感谢你。这就成功了。然而,我怎样才能以递归的方式来实现这一点?你所说的
递归方式是什么意思?
?如果可能的话,使用“recursive With”我认为这里没有任何必要专门使用递归CTE。你还需要它吗?我必须做一个家庭作业,它指定我需要使用递归查询做类似的事情。Listag函数很好,看起来是一个不错的选择,但我想了解如何使用递归查询来实现它