我真的试过解决这个问题,现在花了我太多的时间。我只需要它来向我的学生演示程序的其他功能。我和他们不需要这么复杂的东西
我有一个查询,我需要更新一个表(投标)的基础上找到一个字段(设计代码)和投标金额的最小值
我已经走到这一步了
UPDATE Bids a
INNER JOIN (SELECT DesignCode, MIN(Bid_Amount) AS Bid_Amount
FROM Bids
WHERE DesignCode = "FT1") AS b
ON (a.DesignCode=b.DesignCode AND a.Bid_Amount =b.Bid_Amount)
SET Bid_Currently_Successful = No
WHERE a.DesignCode = "FT1" AND a.Bid_Amount =b.Bid_Amount; ');
这基于sql更新表,其中date=min(date)
但我得到了一个错误:
select中投标金额引起的循环引用
我想我知道为什么,重复的名字,但不知道该换哪一个
我还得到一个错误:
您的查询不包括指定的表达式“designcode”作为聚合函数的aprt。
如果我改变了出价金额的名称
3条答案
按热度按时间toe950271#
我做到了!谢谢你们的帮助,这帮了我的忙。可能不漂亮,但我还有别的事要做,所以我不在乎
更新bids a set bid\u currently\u successful=no where((a.bidders)=(从bids\u currently\u successful=yes和designcode='ft1'按投标金额排序的投标中选择前1名投标者)和((a.date\u time\u of \u bid)=(从bids\u currently\u successful=yes和designcode='ft1'按投标金额排序的投标中选择前1名日期\u time\u));
所有额外的支架都有权进入。。。
tkqqtvp12#
这应该可以在mysql中使用:
大多数更改都是表面的,但仍然有用:
别名打开
Bid_Currently_Successful
. 在更新中使用联接时,这是一个很好的做法。字符串常量周围用单引号代替双引号。
单引号
no
(除非那是你的数据中的一列)。GROUP BY
在子查询中。zlhcx6iw3#
首先,你好,李先生,欢迎来到stackoverflow。
其次,在内部查询中
SELECT DesignCode, MIN(Bid_Amount) AS Bid_Amount FROM Bids WHERE DesignCode = "FT1"
您正在尝试对另一列使用聚合函数。通常,要解决这个问题,必须使用group by
包含不在聚合函数中的列的子句。但是,这会改变您需要的内容,因为这将返回行作为每个设计代码的最小值。那不是你想要的。
您需要的是该行的主键,该行的出价金额是所有出价金额中最低的,因此可以更新该表
bids
用它。所以你的内部查询是这样的:
当按升序排序时,这将返回第一行
Bid_Amount
.因此,您的总体查询如下所示:
我想,这应该行得通。
但我不认为这是一个干净的方式,所以,这里有另一种方式,我会处理这个。。。
我认为这是一个更干净更快的方法。在这种方法中,我确保
Bids
这张table适合你的情况。虽然,我应该建议,我还没有检查这个方法,但它似乎是一个有趣的和更快的方式来做这件事。
快乐教学……)
edit1:如果您使用的是mysql,则查询结果为:
更清洁的方法是:
谢谢p.salmon的编辑。
edit2:谢谢你的餐桌细节,李先生。帮了我很多。还添加了where条件,我似乎错过了。