WHERE ',' + Manager + ',' LIKE '%,Jim,%'
या मुझे लगता है कि आपके वास्तविक कोड से मेल खाना चाहिए:
WHERE ',' + Manager + ',' LIKE '%,' + @Manager + ',%'
ध्यान दें कि आपका डिज़ाइन बेहद त्रुटिपूर्ण है। इस तालिका में नामों को संग्रहीत करने का कोई कारण नहीं है, किसी भी डेटा बिंदुओं की अल्पविराम से अलग सूची पर ध्यान न दें। ये तथ्य अपने आप में महत्वपूर्ण हैं, इसलिए उनके साथ वैसा ही व्यवहार करें!
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)
);
अब आपके द्वारा उल्लिखित नमूना डेटा सेट करने के लिए:
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);
अब उन सभी परियोजनाओं को खोजने के लिए जिन्हें जिम प्रबंधित कर रहा है:
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;
या आप मैन्युअल रूप से थोड़ा सा शॉर्ट सर्किट भी कर सकते हैं:
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;
या इससे भी अधिक:
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
);
एक तरफ के रूप में, मैं वास्तव में, वास्तव में, वास्तव में DISTINCT
. की आशा करता हूं आपकी मूल क्वेरी में अनावश्यक है। क्या आपके पास वास्तव में एक ही नाम के एक से अधिक प्रोजेक्ट हैं और आईडी?