我有一张桌子:
CREATE TABLE `test` (
`id` int(11) NOT NULL,
`pn` varchar(40) NOT NULL,
`price` int(1) NOT NULL,
`company` varchar(30) NOT NULL,
`flag` varchar(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我想做的就是找到最便宜的商品(pn),而我设法做到了:
SELECT DISTINCT min(price), pn, company FROM `test` GROUP BY pn
但是我怎么也可以用国旗标记最便宜的商品。我要为所有结果更新表格,设置标志= 1。
怎么做?是否可以将UPDATE表与SELECT DISTINCT一起使用?
这是一个SQL Fiddle:
http://sqlfiddle.com/#!9/ea1b3f/9
最佳答案
首先,将select distinct
与group by
几乎从来都不是正确的选择。大概,您打算执行以下操作:
SELECT min(price), pn, min(company)
FROM `test`
GROUP BY pn;
如果要为所有最低价格设置标志,请使用联接:
update test t join
(select pn, min(price) as minprice
from test
group by pn
) tt
on t.pn = tt.pn and t.price = tt.minprice
set t.flag = 1;
关于mysql - 如何将SET与SELECT DISTINCT一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49485843/