我有这张桌子:
CREATE TABLE AccessUser
(
`AccessUserID` int,
`AccessUserName` varchar(255),
`AccessUserType` int,
`AccessUserGroups` varchar(255)
);
INSERT INTO AccessUser
( `AccessUserID`,
`AccessUserName`,
`AccessUserType`,
`AccessUserGroups`
)
VALUES
(1, 'Group 1', 2, ''),
(2, 'Group 2', 2, ''),
(3, 'John', 5, '@1@'),
(4, 'Nick', 5, '@1@@2@');
问题:如何获得此结果(基于AccessUserGroups
,引用AccessUserID
)?
| NAME | FIRMNAME |
|------|----------|
| John | Group 1 |
| Nick | Group 1 |
| Nick | Group 2 |
我尝试过这样的事情,但是我收到了错误:
SELECT DISTINCT
Empl.AccessUserName AS Name,
Firm.AccessUserName AS FirmName
FROM AccessUser AS Firm, AccessUser AS Empl
WHERE Empl.AccessUserType = 5
AND Empl.AccessUserGroups LIKE ('%@' + CAST(Firm.AccessUserID AS VARCHAR(10)) + '@%')
ORDER BY Empl.AccessUserName ASC
错误:
"您的SQL语法出错了;检查与您的MySQL服务器版本对应的手册,以便在#34;附近使用正确的语法。
'VARCHAR(10)) + '@%') ORDER BY Empl.AccessUserName ASC'
在第6行:... [再次使用相同的SQL]
答案 0 :(得分:2)
如果你使用CONCAT,那么演员是隐含的:
SELECT DISTINCT
Empl.AccessUserName AS Name,
Firm.AccessUserName AS FirmName
FROM AccessUser AS Firm, AccessUser AS Empl
WHERE Empl.AccessUserType = 5
AND Empl.AccessUserGroups LIKE CONCAT('%@', Firm.AccessUserID, '@%')
ORDER BY Empl.AccessUserName ASC;
<强> Example on SQL Fiddle 强>