gpt4 book ai didi

sql-server - SQL Server DISTINCT 和 GROUP BY 仍然返回重复项(子查询格式)

转载 作者:行者123 更新时间:2023-11-29 14:04:10 27 4
gpt4 key购买 nike

感谢社区,我能够解决一个问题,但又产生了另一个问题。当我运行此查询时,它返回重复项:

SELECT 
a.*
, b.Bytes
FROM
(
SELECT DISTINCT
a_inner.Number
, a_inner.Latitude
, a_inner.Longitude
, b_inner.RetiredOn
, a_inner.Name
, a_inner.Zipcode
, b_inner.Oid
FROM
"AM-Martin".dbo.CpCore_Site a_inner
INNER JOIN "AM-Martin".dbo.CpSm_Face b_inner on b_inner.SiteId = a_inner.Oid
WHERE
b_inner.RetiredOn LIKE '%9999%'
AND b_inner.Number LIKE N'%LA%' OR b_inner.Number LIKE N'%LC%' OR b_inner.Number LIKE N'%BH%'
AND b_inner.Latitude > 0.0
) AS a
INNER JOIN "AM-Martin_bin".dbo.CpCore_Image b on a.Oid = b.OwnerId;

所以我尝试更改它并使用 GROUP BY 运行此查询以查看我是否可以摆脱重复项但它不起作用我仍然得到重复项:

SELECT 
a.*
, b.Bytes
FROM
(
SELECT
a_inner.Number
, a_inner.Latitude
, a_inner.Longitude
, b_inner.RetiredOn
, a_inner.Name
, a_inner.Zipcode
, b_inner.Oid
FROM
"AM-Martin".dbo.CpCore_Site a_inner
INNER JOIN "AM-Martin".dbo.CpSm_Face b_inner on b_inner.SiteId = a_inner.Oid
WHERE
b_inner.RetiredOn LIKE '%9999%'
AND b_inner.Number LIKE N'%LA%' OR b_inner.Number LIKE N'%LC%' OR b_inner.Number LIKE N'%BH%'
AND b_inner.Latitude > 0.0

GROUP BY
a_inner.Number
, a_inner.Latitude
, a_inner.Longitude
, b_inner.RetiredOn
, a_inner.Name
, a_inner.Zipcode
, b_inner.Oid


) AS a
INNER JOIN "AM-Martin_bin".dbo.CpCore_Image b on a.Oid = b.OwnerId;

在您询问之前,我确实需要包括图像在内的每一列。任何帮助将不胜感激。我的目标是删除所有重复项。

以下是我的结果中的两个示例,它们在第 93 行和第 94 行中是重复的:

duplicate photo

我以前在没有子查询的情况下运行查询,但遇到了图像列的其他问题,请参阅 Split SQL query into a nested query (subquery)

更新

我运行了以下查询,但仍然收到重复项:

SELECT DISTINCT
a.*
, cast(cast(b.Bytes as varbinary(max)) as varchar(max)) as Bytes
FROM
(
SELECT
a_inner.Number
, a_inner.Latitude
, a_inner.Longitude
, b_inner.RetiredOn
, a_inner.Name
, a_inner.Zipcode
, b_inner.Oid
FROM
"AM-Martin".dbo.CpCore_Site a_inner
INNER JOIN "AM-Martin".dbo.CpSm_Face b_inner on b_inner.SiteId = a_inner.Oid
WHERE
b_inner.RetiredOn LIKE '%9999%'
AND b_inner.Number LIKE N'%LA%' OR b_inner.Number LIKE N'%LC%' OR b_inner.Number LIKE N'%BH%'
AND b_inner.Latitude > 0.0
) AS a
INNER JOIN "AM-Martin_bin".dbo.CpCore_Image b on a.Oid = b.OwnerId;

我得到以下结果:

enter image description here

如果我运行这个查询,我会得到我想要的结果:

SELECT 
"AM-Martin".dbo.CpCore_Site.Number,"AM-Martin".dbo.CpCore_Site.Latitude,"AM-Martin".dbo.CpCore_Site.Longitude,"AM-Martin".dbo.CpSm_Face.RetiredOn,CAST("AM-Martin_bin".dbo.CpCore_Image.Bytes as Varbinary), "AM-Martin".dbo.CpCore_Site.Name, "AM-Martin".dbo.CpCore_Site.Zipcode
FROM
"AM-Martin".dbo.CpCore_Site

INNER JOIN "AM-Martin".dbo.CpSm_Face on "AM-Martin".dbo.CpSm_Face.SiteId = "AM-Martin".dbo.CpCore_Site.Oid
INNER JOIN "AM-Martin_bin".dbo.CpCore_Image on "AM-Martin".dbo.CpSm_Face.Oid = "AM-Martin_bin".dbo.CpCore_Image.OwnerId

WHERE
"AM-Martin".dbo.CpSm_Face.RetiredOn LIKE '%9999%'

AND "AM-Martin".dbo.CpCore_Site.Number LIKE N'%LA%' OR "AM-Martin".dbo.CpCore_Site.Number LIKE N'%LC%' OR "AM-Martin".dbo.CpCore_Site.Number LIKE N'%BH%'


AND "AM-Martin".dbo.CpCore_Site.Latitude > 0.0

GROUP BY "AM-Martin".dbo.CpCore_Site.Number,"AM-Martin".dbo.CpCore_Site.Latitude,"AM-Martin".dbo.CpCore_Site.Longitude,"AM-Martin".dbo.CpSm_Face.RetiredOn,CAST("AM-Martin_bin".dbo.CpCore_Image.Bytes as Varbinary), "AM-Martin".dbo.CpCore_Site.Name, "AM-Martin".dbo.CpCore_Site.Zipcode;

但现在这个问题变成了当我将 sql 结果转换为 postgres 时我无法再渲染图像,这就是为什么我试图保持图像数据不变而不转换为 varbinary 并将它们带到 postgres。

更新 2

我运行了 amighty 的查询,我注意到它们所属的每个所有者 ID 都有多个图像。我需要将查询调整为只显示每个所有者 ID 一个,而不是每个所有者 ID 显示所有这些。

enter image description here

最佳答案

没有示例数据很难说,但我最初的想法是您的子查询返回唯一值,因为 distinct 仅适用于子查询。但是在加入第二个表(“AM-Martin_bin”.dbo.CpCore_Image)时有多个匹配项。

这同样适用于“group by”,它只适用于子查询,在连接到第二个表时有机会重复返回。

希望这对您有所帮助。

关于sql-server - SQL Server DISTINCT 和 GROUP BY 仍然返回重复项(子查询格式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45577113/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com