我需要在此查询中“单独”获取nid。
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 bird_countries set season="1" where nid in (SELECT nid FROM bird_countries group by nid HAVING count(*) = 1)
和mysql说“你不能在FORM子句中为更新指定平板电脑目标'bird_countries'。” 嗯,有没有简单/快速的方法来做到这一点?我可以复制表bird_countries并将其用于更新(稍后放弃),但可能有更简洁的方法。谢谢!
答案 0 :(得分:5)
我认为您希望nids是唯一的,没有重复。试试这个:
SELECT nid
FROM bird_countries
GROUP BY nid
HAVING COUNT(*) = 1
答案 1 :(得分:1)
编辑完成后,我会看到您正在尝试做什么
UPDATE table SET field=1 WHERE id in (SELECT nid FROM bird_countries GROUP BY nid HAVING count(nid) = 1);
答案 2 :(得分:1)
UPDATE table
SET field = 1
WHERE id IN (
SELECT nid
FROM bird_countries
GROUP BY nid
HAVING COUNT(nid) = 1
)
答案 3 :(得分: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
答案 4 :(得分: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