我有 3 張桌子
用戶
user_id name
1 mike
Assigned_Bosses
user_id boss_id
1 3
1 5
老板
boss_id boss_email
3 foo@bar.com
5 test@bar.com
如何選擇一個用戶,以便我可以在單行中獲取所有老板的電子郵件,以;分隔?
name boss_email
mike foo@bar.com;test@bar.com
以下顯然不起作用,但這是我想要做的:
SELECT concat(b.boss_email), u.name
FROM Users u
LEFT OUTER JOIN Assigned_Bosses a ON a.user_id = u.user_id
LEFT OUTER JOIN Bosses b ON b.boss_id = a.boss_id
WHERE user_id = 1
這也是 SQL Server 2008,因此并非所有功能都可用。
uj5u.com熱心網友回復:
您可以使用以下查詢
SELECT
name,
STUFF((SELECT ';' b.boss_email
FROM Users u
LEFT OUTER JOIN Assigned_Bosses a ON a.user_id = u.user_id
LEFT OUTER JOIN Bosses b ON b.boss_id = a.boss_id
WHERE u.user_id = 1
for xml path(''), TYPE).value('text()[1]', 'NVARCHAR(MAX)'),1,LEN(';'),'')
from Users
where user_id = 1
db<>fiddle中的演示
uj5u.com熱心網友回復:
在 SQL Server 具有內置字串連接函式之前,實作相同的傳統方法是for xml 'hack'。
要在您的示例資料上實作這一點,您可以嘗試
select u.name, Stuff((
select ';' b.boss_email
from Assigned_Bosses a
left join Bosses b on b.boss_id = a.boss_id
where a.user_id = u.user_id
for xml path(''),type
).value('.','varchar(max)'),1,1,'') as Boss_Email
from users u
where u.user_id=1
注意 - 我在 2008 年沒有任何測驗方法,但我相信這應該有效。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/415075.html
標籤:
上一篇:此子查詢回傳超過1個值。當子查詢跟隨=、!=、<、<=、>、>=時,這是不允許的
下一篇:洗掉字符左右的單詞
