SQL 查询删除与两个不同数据库的 3 个表内部连接中的重复值

标签 sql sql-server database sql-server-2008

我正在使用 SQL Server 数据库并编写了以下查询:

SELECT 
    "AM-Martin".dbo.CpCore_Site.Latitude,"AM-Martin".dbo.CpCore_Site.Longitude,"AM-Martin".dbo.CpSm_Face.RetiredOn,"AM-Martin_bin".dbo.CpCore_Image.Bytes, "AM-Martin".dbo.CpCore_Site.Name, "AM-Martin".dbo.CpCore_Site.Zipcode, "AM-Martin".dbo.CpCore_Site.Number
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;

查询返回我需要的数据,但它复制了一些数据。当我尝试添加 Distinct 以去除重复数据时...

SELECT DISTINCT 
    "AM-Martin".dbo.CpCore_Site.Latitude,"AM-Martin".dbo.CpCore_Site.Longitude,"AM-Martin".dbo.CpSm_Face.RetiredOn,"AM-Martin_bin".dbo.CpCore_Image.Bytes, "AM-Martin".dbo.CpCore_Site.Name, "AM-Martin".dbo.CpCore_Site.Zipcode, "AM-Martin".dbo.CpCore_Site.Number
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;

由于此列 "AM-Martin_bin".dbo.CpCore_Image.Bytes 此列是实际图像数据,因此不允许我使用它。我收到的错误消息是:

ERROR: The image data type cannot be selected as DISTINCT because it is not comparable. Error Code: 421

我正在尝试删除所有重复数据。要访问我使用 RazorSQL 的数据库,远程数据库是使用 SQL Server 的 Microsoft Server 2008。

更新

我使用了 GROUP BY,它看起来像这样:

SELECT 
    "AM-Martin".dbo.CpCore_Site.Latitude,"AM-Martin".dbo.CpCore_Site.Longitude,"AM-Martin".dbo.CpSm_Face.RetiredOn,"AM-Martin_bin".dbo.CpCore_Image.Bytes, "AM-Martin".dbo.CpCore_Site.Name, "AM-Martin".dbo.CpCore_Site.Zipcode, "AM-Martin".dbo.CpCore_Site.Number
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.Name;

现在我收到以下错误:

ERROR: Column 'AM-Martin.dbo.CpCore_Site.Latitude' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. Error Code: 8120

现在,如果我向组中添加更多列,它会一直对下一列说同样的话,直到我到达 "AM-Martin_bin".dbo.CpCore_Image.Bytes我得到以下内容错误信息:

ERROR: The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator. Error Code: 306

最佳答案

感谢 group by clause is not working with Image,我弄明白了我所要做的就是通过像这样将其转换为 VARBINARY 来更改图像列的措辞:

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;

我还必须感谢@Myonara,感谢他通过建议让我与团队一起走上了正确的轨道。

关于SQL 查询删除与两个不同数据库的 3 个表内部连接中的重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45539408/

相关文章:

php - 仅当数据不存在时才将数据从一个表插入到另一个表

SQL查询问题

mysql - 内部连接 ​​4 个表,带 group、order by、having 子句

python - 我应该为 'social' 网站的后端使用什么?

c++ - C++中的小型数据库管理

sql - MS ACCESS - 根据另一个字段的条件从表中动态检索记录

sql - 在另一个 JOINS 子查询中引用来自 JOIN 的列

java - 通过 native SQL删除的子实体仍然存在于entityManager中

c# - 使用不存在的模型实体返回结果 - EF .net Core 3

python - 将 Django 数据库导出到 YAML 文件