我有一张桌子:

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 distinctgroup 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/

10-12 19:48