我无法将以下内容转换为带有子查询的sql语句:
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
, "AM-Martin_bin".dbo.CpCore_Image.Bytes
, "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
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
, "AM-Martin_bin".dbo.CpCore_Image.Bytes
, "AM-Martin".dbo.CpCore_Site.Name
, "AM-Martin".dbo.CpCore_Site.Zipcode;
图像数据类型给了我关于尝试使用GROUP BY的问题我得到的错误是:
错误:无法比较text,ntext和image数据类型 排序,除非使用IS NULL或LIKE运算符。错误代码:306
我找到了一个解决方案,请参阅我之前的问题SQL Query to delete duplicate values in a 3 tables inner join with two different databases,但我的图片存在转换问题。
我的目标是编写一个子查询来获取主sql语句之外的图像,然后加入图像。到目前为止,这就是我所拥有的:
SELECT
"AM-Martin_bin".dbo.CpCore_Image.Bytes
FROM
(
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
, "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
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
, "AM-Martin".dbo.CpCore_Site.Name
, "AM-Martin".dbo.CpCore_Site.Zipcode
) AS a
INNER JOIN "AM-Martin_bin".dbo.CpCore_Image on "AM-Martin".dbo.CpSm_Face.Oid = "AM-Martin_bin".dbo.CpCore_Image.OwnerId;
运行此查询时出现的错误是:
错误:多部分标识符" AM-Martin.dbo.CpSm_Face.Oid"可以 不受约束。错误代码:4104
任何帮助实现这一目标的人都将不胜感激。
答案 0 :(得分:1)
编辑:添加
中的所有列我似乎无法再编辑我的评论,但这应该可以解决第二个问题:
SELECT
a.*
, "AM-Martin_bin".dbo.CpCore_Image.Bytes
FROM
(
SELECT DISTINCT
"AM-Martin".dbo.CpCore_Site.Number
, "AM-Martin".dbo.CpCore_Site.Latitude
, "AM-Martin".dbo.CpCore_Site.Longitude
, "AM-Martin".dbo.CpSm_Face.RetiredOn
, "AM-Martin".dbo.CpCore_Site.Name
, "AM-Martin".dbo.CpCore_Site.Zipcode
, "AM-Martin".dbo.CpSm_Face.Oid
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
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
) AS a
INNER JOIN "AM-Martin_bin".dbo.CpCore_Image on a.Oid = "AM-Martin_bin".dbo.CpCore_Image.OwnerId;
注意我从内部查询中删除了GROUP BY
,而是添加了DISTINCT以消除可能的重复项。但是,我无法测试这是否有效,因为我不知道您的数据。
为了便于阅读,我建议您为表格添加别名,而不是在任何地方重复"AM-MARTIN".dbo.<tablename>
部分(最初会让我失去关于找到合适的列等等)。
示例:
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;
请注意,我为子查询使用了a_inner
和b_inner
别名。但是,您也可以使用a
和b
。我真的很想确保你看到差异,而不是想知道列的来源。