此查询通过将存在相互匹配的两个表连接在一起来获取ID,名字,出生日期
相互匹配的例子:
艾米喜欢玛丽
玛丽喜欢艾米
SELECT u.ID, u.firstname, u.dob, i.[Image]
FROM [dbo].[User] AS u
INNER JOIN [dbo].[Images] AS i ON u.ID = i.Id
WHERE u.ID IN (
SELECT userB FROM [dbo].[LikesRefined]
WHERE userA = @ID OR userB = @ID
UNION
SELECT userB FROM [dbo].[LikesRefined]
WHERE userA = @ID OR userB = @ID
);
我想通过在另一个表上使用except子句来过滤此结果,但我一直收到此错误
使用UNION,INTERSECT或EXCEPT运算符组合的所有查询在目标列表中必须具有相同数量的表达式。
except
(select paidA
from [dbo].[Matches]
WHERE paidA = @ID
AND (userA = @ID or userB = @ID))
end
答案 0 :(得分:0)
我仍然感到困惑,但我认为这可能会有所帮助:
SELECT u.ID ,
u.firstname ,
u.dob ,
i.[Image]
FROM [dbo].[User] AS u
INNER JOIN [dbo].[Images] AS i ON u.ID = i.Id
INNER JOIN dbo.[LikesRefined] lr ON (u.ID = lr.userA OR u.ID = lr.userB)
LEFT OUTER JOIN dbo.Matches m ON u.ID = m.paidA
AND ( m.userA = u.ID OR m.userb = u.ID )
WHERE (lr.userA = @ID OR lr.userB = @ID)
AND m.paidA IS NULL
我们摆脱了union运算符,只需在LikeRefined表中的userA或userB中检查ID。然后我们离开加入dbo.Matches并只查找没有匹配的记录。
答案 1 :(得分:-1)
使用union运算符时,所有select语句必须具有相同的列数