2017-08-08 144 views
1

我有困難轉換到下列SQL語句使用子查詢:拆分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當我得到的錯誤是:

ERROR: The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator. Error Code: 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; 

當我運行此查詢我得到的錯誤是:

ERROR: The multi-part identifier "AM-Martin.dbo.CpSm_Face.Oid" could not be bound. Error Code: 4104

任何幫助,得到這個權利,將不勝感激。

+0

您正在使用哪種RDBMS?你用postgress和SQL Server標記了它。哪一個? – SchmitzIT

+0

道歉只是修正了它,但它是SQL Server ... –

+0

你爲什麼使用GROUP BY?你不使用任何聚合函數。你想用GROUP BY來實現什麼? – SchmitzIT

回答

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來擺脫可能的重複。但是,我無法測試這是否可行,因爲我不知道您的數據。

出於可讀性的原因,我建議您別名表,而不是重複​​零件無處不在(最初讓我找到合適的列等)。

實施例:

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_innerb_inner別名爲子查詢。但是,您也可以使用ab。我很想確保你能看到差異,而不是想知道列的來源。

+0

當我運行查詢時,這非常有幫助,它只是在沒有錯誤的情況下才顯示出來,而現在它並沒有顯示我想要這樣做的其他列。它只顯示圖像列,沒有別的。我假設它與加入有關? –

+0

@JermaineSubia我的不好。試試我的更新(我剛剛在查詢中添加了一個*) – SchmitzIT

+0

這實際上已經解決了,我一直在等待它完成(它耗費了很多行)我開始時看到了一些,它給了我所尋找的東西。對我來說,下一步是將查詢結果導入到postgres數據庫中,這就是爲什麼我最初將postgres標記爲它在我心中的原因。非常感謝您的耐心和幫助。 –