删除复杂sql查询中的重复数据
我有以下复杂的问题删除复杂sql查询中的重复数据,sql,sql-server,Sql,Sql Server,我有以下复杂的问题 SELECT TOP 20 [image].Image_id, Source_Link FROM Item INNER JOIN [Image] ON Item.Image_id = [Image].Image_id INNER JOIN Age_Item ON Item.Item_id = Age_Item.Item_id WHERE Gender = 'male' AND Age_Item.Age_id = 4
SELECT TOP 20
[image].Image_id, Source_Link
FROM
Item
INNER JOIN
[Image] ON Item.Image_id = [Image].Image_id
INNER JOIN
Age_Item ON Item.Item_id = Age_Item.Item_id
WHERE
Gender = 'male'
AND Age_Item.Age_id = 4
AND [Image].Image_id NOT IN
(SELECT [Image].Image_id
FROM [Image]
INNER JOIN Item on [Image].Image_id = Item.Image_id
INNER JOIN Session_Item on Item.Item_id = Session_Item.Item_id
WHERE Session_Item.Session_id = 3)
ORDER BY
NEWID() -- random rows
然而,我意识到有时它会显示一些重复的结果,我想删除重复的行
我尝试了选择DISTINCT
,但它显示了以下错误:
如果指定了select DISTINCT,则ORDER BY项目必须出现在选择列表中
在这种情况下,我不能使用分组依据([Image].Image\u id)
,因为聚合函数中不包含列[Image].Source\u链接
我应该如何解决此问题
//编辑:
我已经这样做了,谢谢你们的回答
SELECT TOP 20 * FROM
(
SELECT DISTINCT [image].Image_id, Source_Link
FROM Item
INNER JOIN [Image] ON Item.Image_id = [Image].Image_id
INNER JOIN Age_Item ON Item.Item_id = Age_Item.Item_id
WHERE Gender='male'
AND Age_Item.Age_id = 4
AND [Image].Image_id NOT IN
(
SELECT [Image].Image_id
FROM [Image]
INNER JOIN Item on [Image].Image_id = Item.Image_id
INNER JOIN Session_Item on Item.Item_id = Session_Item.Item_id
WHERE Session_Item.Session_id = 3
)
)query ORDER BY NEWID();
…它对我来说编译得很好。既然你想要一个随机的20个不同的顺序,你需要得到一个不同的集合,然后根据新的ID应用你的前20个顺序
你可以用CTE来做
with cte as (
SELECT DISTINCT [image].Image_id, Source_Link
FROM Item
INNER JOIN [Image] ON Item.Image_id = [Image].Image_id
INNER JOIN Age_Item ON Item.Item_id = Age_Item.Item_id
WHERE Gender='male'
AND Age_Item.Age_id = 4
AND [Image].Image_id NOT IN
(
SELECT [Image].Image_id
FROM [Image]
INNER JOIN Item on [Image].Image_id = Item.Image_id
INNER JOIN Session_Item on Item.Item_id = Session_Item.Item_id
WHERE Session_Item.Session_id = 3
)
)
Select TOP 20 DISTINCT * FROM CTE ORDER BY NEWID()
你有重复行的例子吗?是的,例如,这些是我最后一次测试的结果。例如,这些是我最后一次测试的结果。例如,这些是我最后一次测试的结果:48 ~/项目/项目/项目/48/项目/项目/48/项目/项目/48/项目/项目/48/项目/项目/项目/项目/项目/项目/项目/项目/项目/48/项目/项目/项目/项目/项目/项目/项目/项目/48/项目/项目/48/项目/项目/项目/项目/项目/项目/项目/194878787878787877 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7。。。请注意,id 84的行是重复的,但它在“')附近显示了错误语法。最后一个问题是我的不好,最后我忘了添加单词查询。是的,但仍然存在一个问题,行是按图像id排序的。我得到了这个错误>>消息156,级别15,状态1,第3行关键字“选择”附近的语法不正确。Msg 102,级别15,状态1,第17行“')”附近语法不正确。@AboudZakaria忘记了CTE和之间的关键字,
(啊哈,知道了,它工作起来很有魅力,谢谢。现在唯一的问题是行再次按图像id排序
SELECT DISTINCT * FROM (
SELECT TOP 20 [image].Image_id, Source_Link
FROM Item
INNER JOIN [Image] ON Item.Image_id = [Image].Image_id
INNER JOIN Age_Item ON Item.Item_id = Age_Item.Item_id
WHERE Gender='male'
AND Age_Item.Age_id = 4
AND [Image].Image_id NOT IN
(
SELECT [Image].Image_id
FROM [Image]
INNER JOIN Item on [Image].Image_id = Item.Image_id
INNER JOIN Session_Item on Item.Item_id = Session_Item.Item_id
WHERE Session_Item.Session_id = 3
)
ORDER BY NEWID()) query;
with cte as (
SELECT DISTINCT [image].Image_id, Source_Link
FROM Item
INNER JOIN [Image] ON Item.Image_id = [Image].Image_id
INNER JOIN Age_Item ON Item.Item_id = Age_Item.Item_id
WHERE Gender='male'
AND Age_Item.Age_id = 4
AND [Image].Image_id NOT IN
(
SELECT [Image].Image_id
FROM [Image]
INNER JOIN Item on [Image].Image_id = Item.Image_id
INNER JOIN Session_Item on Item.Item_id = Session_Item.Item_id
WHERE Session_Item.Session_id = 3
)
)
Select TOP 20 DISTINCT * FROM CTE ORDER BY NEWID()