MySQL資料庫,有一個userinfo(人員)表和dept(部門)表,userinfo表有一個欄位userinfo.dept保存了一個人員所在的一級部門,二級部門,三級部門的id,中間用逗號隔開,dept表有dept.id(id主鍵)和dept.name(部門名稱)
問:如何用一句sql查詢出每個人員所對應的資訊,特別是每一級的部門資訊?
uj5u.com熱心網友回復:
CREATE TABLE [User](
UserId INT,
UserName VARCHAR(50),
Depart VARCHAR(50)
)
CREATE TABLE Depart
(
DepartId INT,
DepartName VARCHAR(50)
)
INSERT INTO dbo.[User]
( UserId, UserName, Depart )
SELECT 1, '張三', '1,2,3' UNION
SELECT 2, '李四', '4,5,6'
INSERT INTO dbo.Depart
( DepartId, DepartName )
SELECT 1, '深圳市' UNION
SELECT 2, '開發部' UNION
SELECT 3, '開發一組' UNION
SELECT 4, '北京' UNION
SELECT 5, '市場部' UNION
SELECT 6, '市場一部'
SELECT *
FROM
(
SELECT A.*, SUBSTRING(A.Depart, 0, CHARINDEX(',', A.Depart, 0)) AS FirstDepart, SUBSTRING(A.Depart, CHARINDEX(',', A.Depart, 0)+1, CHARINDEX(',', A.Depart, CHARINDEX(',', A.Depart, 0))-1) AS SecondDepart,
SUBSTRING(REVERSE(A.Depart), 0, CHARINDEX(',', REVERSE(A.Depart), 0)) AS ThreeDepart
FROM dbo.[User] AS A
) AS A
INNER JOIN dbo.Depart AS B ON A.FirstDepart = B.DepartId
INNER JOIN dbo.Depart AS C ON A.SecondDepart = C.DepartId
INNER JOIN dbo.Depart AS D ON A.ThreeDepart = D.DepartId
uj5u.com熱心網友回復:
沒有提供截圖,我自己造了幾條資料說下思路:
如果你的 【userinfo.dept】每條資料都有兩個逗號,那就可以用我上面的代碼
主要會用到 CHARINDEX函式 SUBSTRING函式
也是比較簡單的,先找第一個逗號左邊的為第一個部門
再找第二個逗號左邊的為第二個部門(注意SUBSTRING函式的第二個引數就行了)
第三個部門,可以先把欄位反轉一下,就跟找第一個部門一樣了
uj5u.com熱心網友回復:
沒效果 但是很感謝uj5u.com熱心網友回復:
當參考吧這個是針對dept欄位長度不一致的陳述句:
SELECT A.id, A.name, A.dept, GROUP_CONCAT(B.name ORDER BY A.Id2 separator ',') AS deptName
FROM
(
SELECT B.id, B.name, B.dept, A.help_topic_id AS Id2, SUBSTRING_INDEX(SUBSTRING_INDEX(B.dept,',',help_topic_id+1),',',-1) AS dept2
FROM help_topic AS A
INNER JOIN userinfo AS B ON A.help_topic_id < (LENGTH(B.dept) - LENGTH(REPLACE(B.dept, ',', '')) + 1)
) AS A
INNER JOIN dept AS B ON A.dept2 = CONCAT(B.id, '')
GROUP BY A.id, A.name, A.dept
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/103356.html
標籤:疑難問題
上一篇:想要逍遙軟體,誰給個連接
下一篇:如何根據匯總條件篩選?
