2010-06-19 89 views
1

我需要在此查詢中獲得nid「單獨」。返回一個值(而不是總數)的SQL計數

SELECT count(nid) as total,nid FROM bird_countries b group by nid order by total asc` 

基本上我需要這個做類似的東西

update table set field=1 where id in (the other query); 

現在,我得到的總NID的和NID的,但怎麼也找不到剛剛獲得NID值使用它們。

什麼返回第一查詢的一個例子是:

total nid 
1  323 
1  2645 
1  526 
2  123 

所以我只是想獲取值323,2645,526其實我並不想要得到的123作爲計數因爲這是2 我需要在表中設置一個字段爲1,其中數爲1

UPDATE(第二個問題)情況: 我得到一個很好的答案,但現在我有應用它的錯誤。我的查詢是

update bird_countries set season="1" where nid in (SELECT nid FROM bird_countries group by nid HAVING count(*) = 1) 

和mysql說:「您不能在FORM子句中更新指定tablet目標'bird_countries'。」 那麼,有沒有簡單/快速的方法來做到這一點?我可以複製表bird_countries並將其用於更新(稍後放下),但可能有更清晰的方法。謝謝!

+1

什麼是NID,你爲什麼計數他們和你有什麼做的? – 2010-06-19 16:35:41

+0

只是一個整數,一個數字。 – 2010-06-19 16:36:13

+0

+1用於編輯示例。現在問題很明顯。 – 2010-06-19 16:49:08

回答

5

我想你想要的是唯一的,沒有重複的nids。試試這個:

SELECT nid 
FROM bird_countries 
GROUP BY nid 
HAVING COUNT(*) = 1 
+0

就是這樣!謝謝! – 2010-06-19 16:43:47

+0

很簡單,只是改變觀點! – 2010-06-19 16:45:32

1

你的編輯後,我看到你正在試圖做

UPDATE table SET field=1 WHERE id in (SELECT nid FROM bird_countries GROUP BY nid HAVING count(nid) = 1); 
+0

我看到凱德打我:) – 2010-06-19 16:46:08

1
UPDATE table 
SET field = 1 
WHERE id IN (
    SELECT nid 
    FROM bird_countries 
    GROUP BY nid 
    HAVING COUNT(nid) = 1 
) 
+0

是的,謝謝。這也起作用。 – 2010-06-19 16:45:09

1

編輯什麼:以下更新的問題。 This article建議重寫爲JOIN以避免此問題。那麼這個語法是否工作?

update bird_countries as b 
    inner join (
     SELECT nid FROM bird_countries group by nid HAVING count(*) = 1 
    ) as t on t.nid = b.nid 
set season=1 
+0

工作就像一個魅力!謝謝 – 2010-06-19 17:09:56

1

我不確定這是否是您需要的,但是,您是否嘗試更新基於nId的列?

如果你需要做的,你可以這樣做:

update table 
set field=1 
FROM table 
inner join (SELECT count(nid) as total, nid 
FROM bird_countries b 
group by nid 
order by total asc) as Table2 
ON table.id=Table2.nid 
相關問題