WHERE ',' + Manager + ',' LIKE '%,Jim,%'
Hoặc tôi cho là khớp với mã thực của bạn:
WHERE ',' + Manager + ',' LIKE '%,' + @Manager + ',%'
Lưu ý rằng thiết kế của bạn rất thiếu sót. Không có lý do gì bạn phải lưu trữ tên trong bảng này cả, đừng bận tâm đến một danh sách được phân tách bằng dấu phẩy của bất kỳ điểm dữ liệu nào. Những sự thật này tự nó quan trọng, vì vậy hãy đối xử với chúng theo cách đó!
CREATE TABLE dbo.Managers
(
ManagerID INT PRIMARY KEY,
Name NVARCHAR(64) NOT NULL UNIQUE, ...
);
CREATE TABLE dbo.Projects
(
ProjectID INT PRIMARY KEY,
Name NVARCHAR(64) NOT NULL UNIQUE, ...
);
CREATE TABLE dbo.ProjectManagers
(
ProjectID INT NOT NULL FOREIGN KEY REFERENCES dbo.Projects(ProjectID),
ManagerID INT NOT NULL FOREIGN KEY REFERENCES dbo.Managers(ManagerID)
);
Bây giờ để thiết lập dữ liệu mẫu mà bạn đã đề cập:
INSERT dbo.Managers(ManagerID, Name)
VALUES(1,N'John'),(2,N'Jim'),(3,N'Julie');
INSERT dbo.Projects(ProjectID, Name)
VALUES(1,N'Project 1'),(2,N'Project 2');
INSERT dbo.ProjectManagers(ProjectID,ManagerID)
VALUES(1,1),(1,2),(2,2),(2,3);
Bây giờ để tìm tất cả các dự án Jim đang quản lý:
DECLARE @Manager NVARCHAR(32) = N'Jim';
SELECT p.ProjectID, p.Name
FROM dbo.Projects AS p
INNER JOIN dbo.ProjectManagers AS pm
ON p.ProjectID = pm.ProjectID
INNER JOIN dbo.Managers AS m
ON pm.ManagerID = m.ManagerID
WHERE m.name = @Manager;
Hoặc bạn thậm chí có thể đoản mạch theo cách thủ công một chút:
DECLARE @Manager NVARCHAR(32) = N'Jim';
DECLARE @ManagerID INT;
SELECT @ManagerID = ManagerID
FROM dbo.Managers
WHERE Name = @Manager;
SELECT p.ProjectID, p.Name
FROM dbo.Projects AS p
INNER JOIN dbo.ProjectManagers AS pm
ON p.ProjectID = pm.ProjectID
WHERE pm.ManagerID = @ManagerID;
Hoặc thậm chí nhiều hơn:
DECLARE @Manager NVARCHAR(32) = N'Jim';
DECLARE @ManagerID INT;
SELECT @ManagerID = ManagerID
FROM dbo.Managers
WHERE Name = @Manager;
SELECT ProjectID, Name
FROM dbo.Projects AS p
WHERE EXISTS
(
SELECT 1
FROM dbo.ProjectManagers AS pm
WHERE pm.ProjectID = p.ProjectID
AND pm.ManagerID = @ManagerID
);
Ngoài ra, tôi thực sự rất hy vọng DISTINCT
trong truy vấn ban đầu của bạn là không cần thiết. Bạn có thực sự có nhiều dự án có cùng tên và không ID?