在SQL语句中LIKE里面的LIKE?

时间:2014-06-12 08:16:50

标签: mysql sql

我有这张桌子:

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]

1 个答案:

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

相关问题