DECLARE @User TABLE
(
UserID INT NOT NULL,
Name VARCHAR(128)
)
DECLARE @User_Has_Toys TABLE
(
UserID INT NOT NULL,
ToyID INT NOT NULL
)
DECLARE @Toys TABLE
(
ToyID INT NOT NULL,
ToyName VARCHAR(128)
)
INSERT INTO @User (UserID, Name) VALUES (1,'Tom')
INSERT INTO @User (UserID, Name) VALUES (2,'Jim')
INSERT INTO @User (UserID, Name) VALUES (3,'Bob')
INSERT INTO @User_Has_Toys (UserID, ToyID) VALUES (1,2)
INSERT INTO @User_Has_Toys (UserID, ToyID) VALUES (1,3)
INSERT INTO @User_Has_Toys (UserID, ToyID) VALUES (1,4)
INSERT INTO @User_Has_Toys (UserID, ToyID) VALUES (2,2)
INSERT INTO @User_Has_Toys (UserID, ToyID) VALUES (2,4)
INSERT INTO @User_Has_Toys (UserID, ToyID) VALUES (3,4)
INSERT INTO @Toys (ToyID, ToyName) VALUES (1,'Toy1')
INSERT INTO @Toys (ToyID, ToyName) VALUES (2,'Toy2')
INSERT INTO @Toys (ToyID, ToyName) VALUES (3,'Toy3')
INSERT INTO @Toys (ToyID, ToyName) VALUES (4,'Toy4')
INSERT INTO @Toys (ToyID, ToyName) VALUES (5,'Toy5')
SELECT
u.UserID,
u.Name,
uht.ToyID,
t.ToyName
FROM @User AS u
LEFT JOIN @User_Has_Toys AS uht ON u.UserID = uht.UserID
LEFT JOIN @Toys AS t ON t.ToyID = uht.ToyID
WHERE uht.ToyID IN (2,4)
This one is good for SQL Server 2008 r2
don't mind the temp tables I've just used them to represent you're sample table.
应该... WHERE u.id = 2且u.id = 4代替t.id IN( '2', '4') – B4NZ41
不,我需要得到用户必须有toy2和toy4 – fullpipe
请更清楚。你的意思是“玩具2和玩具4”还是“玩具2或玩具4”?因为在你的例子中,你去了后者 –