2016-12-30 131 views
0

我竭力要達到什麼我試圖做的,我需要選擇從表1中的第一個記錄是在表2和更新表2中的比賽與價值。選擇階段從表匹配表一個匹配一號兩個記錄

我已經嘗試了許多方法,並看了很多帖子。但是我只能返回1條記錄或全部記錄。

我以前的嘗試都低於:

SELECT a.URL, 
    a.Caption 
FROM [EAN].[DBO].[tblHotelImageList] a 
WHERE a.EANHotelID IN 
    (SELECT b.EanHotelId FROM [EAN].[DBO].[tblEanFullTextSearch] b 
) 
GROUP BY a.URL, 
    a.Caption; 

以上返回所有記錄

SELECT a.Caption, 
     a.URL 
    FROM [EAN].[dbo].[tblHotelImageList] a 
    LEFT JOIN [EAN].[dbo].[tblEanFullTextSearch] b 
    ON b.EanHotelId = a.EANHotelID 
    AND b.EanHotelId = 
     (SELECT TOP 1 
       a.EANHotelID 
      FROM [EAN].[dbo].[tblHotelImageList] 
      WHERE a.EANHotelID = b.EanHotelId 
     ) 
; 

以上返回所有記錄

此刻上面的代碼,只不過是想檢索記錄,我還沒有開始試圖用記錄更新表格

+0

嗨DVT我只是試圖做一些選擇,嘗試更新一次,我已經克服了問題,我在我的問題中說過。沒有訂單,僅在第1條記錄後 –

+0

因此,您只需要第一條查詢返回的第一條記錄?你如何確定什麼是第一個記錄?像頂級1 ORDER BY先決定什麼。 – JeffO

回答

1

相反的left join,使用outer apply

通常情況下,當你想要一個行,你要基於特定的順序上排。這就是'??'是爲了。

您可以對UPDATE使用類似的邏輯。

+0

嗨Gurwinder辛格,這並不像以前的嘗試Guestroom 餐廳 http://hotels/1000000/10000/100/1/1_13_b.jpg http:// hotels/1000000/10000/100/1/1_14_b.jpg 211452通知ID是相同的211452 –

0

由於強制記錄是在表2(tblEanFullTextSearch),讓你查詢的驅動程序。該查詢做了你問什麼:

SELECT TOP 1 
    a.Caption, 
    a.URL 
FROM [EAN].[dbo].[tblEanFullTextSearch] b 
INNER JOIN [EAN].[dbo].[tblHotelImageList] a 
    ON b.EanHotelId = a.EANHotelID 
ORDER BY a.EANHotelID; 

如果你需要的所有EanHotelId值的第一場比賽,你可以修改本查詢:

SELECT TOP 1 
    a.Caption, 
    a.URL 
FROM [EAN].[dbo].[tblEanFullTextSearch] b 
INNER JOIN (
    SELECT Caption, 
     URL, 
     EanHotelId, 
     ROW_NUMBER() OVER (Order By EanHotelId) as RowID 
     FROM [EAN].[dbo].[tblHotelImageList] 
    ) a 
    ON b.EanHotelId = a.EANHotelID 
WHERE RowID = 1 
ORDER BY a.EANHotelID; 

有用於選擇第一可能是另一個標準匹配,但它不在你的問題。

+0

嗨Laughing Vergil,不幸的是你的例子只返回1行 –

+0

第二個例子是錯誤的,如果你想所有的情況。從SELECT語句中刪除'Top 1'子句。我的錯,我的錯。 –

相關問題