2013-03-02 60 views
2

任何人都可以幫助這個SQL代碼,我想要更新表列FirstURLForSite爲1的第一場比賽,但我努力與代碼,我只想找到更新第一場比賽。更新表列使用連接

任何人都可以幫助,希望你能明白我想要做什麼。數據

BasesURL        FirstURLForSite 
http://asia1x1.net/       1 
http://asia1x1.net/       0 
http://asia1x1.net/       0 

http://australia.bedandbreakfasts.net/  1 
http://australia.bedandbreakfasts.net/  0 
http://australia.bedandbreakfasts.net/  0 

回答

3

這給一個嘗試,

update [dbo].[at_WebsitesSearch] 
set [FirstURLForSite] = 1 
where(

left outer join 
select min(ID) as rowid, [BaseURL] 
from [dbo].[at_WebsitesSearch] 
group by [BaseURL]) as FirstMatch on 
[dbo].[at_WebsitesSearch].id = FirstMatch.rowid 
where FirstMatch.rowid is null 

例子中,我試圖解決您的當前查詢

UPDATE a 
SET  a.FirstURLForSite = 1 
FROM at_WebsitesSearch a 
     LEFT JOIN 
     (
      SELECT MIN(ID) AS rowid, BaseURL 
      FROM at_WebsitesSearch 
      GROUP BY BaseURL 
     ) FirstMatch 
      ON FirstMatch.rowid = a.id 
WHERE FirstMatch.rowid IS NULL 

更新1

WITH records 
AS 
(
    SELECT BasesURL, FirstURLForSite, 
      ROW_NUMBER() OVER (PARTITION BY BasesURL ORDER BY BasesURL ASC) rn 
    FROM at_WebsitesSearch 
) 
UPDATE records 
SET  FirstURLForSite = CASE WHEN rn = 1 THEN rn ELSE 0 END 
+0

JW嗨,遺憾的是不工作,所有FirstURLForSite = 1 – CareerChange 2013-03-02 13:40:16

+0

@CareerChange看到我更新':D'希望現在的工作.. – 2013-03-02 13:45:23

+0

嗨JW感謝,工程請客再次感謝 – CareerChange 2013-03-02 13:47:46

0

你必須這樣做就像這樣。下面還要檢查他們的Fiddle Demo。

;WITH CTE 
AS 
( 
    SELECT BasesURL, FirstURLForSite, 
     ROW_NUMBER() OVER (PARTITION BY BasesURL 
          ORDER BY BasesURL DESC) RN 
    FROM at_WebsitesSearch 
) 
UPDATE CTE 
SET  FirstURLForSite = 1 
WHERE RN = 1 

SQL Fiddle Demo