从连接表中选择 min

Posted

技术标签:

【中文标题】从连接表中选择 min【英文标题】:selecting min from joined tables 【发布时间】:2014-01-07 19:10:46 【问题描述】:

我自己无法解决这个问题,所以我想知道你们是否可以帮助我。我试图在谷歌、*** 和其他几个位置找到我的答案,但没有任何结果..

我做了一个查询:

SELECT leverancier.leveranciers_id,
    medicijn.artikelnr,
    medicijn.naam,
    medicijn.in_voorraad,
    medicijn.min_voorraad,
    min(order_medicijn.inkoopprijs) AS price
FROM leverancier
INNER JOIN voorraadorder
    ON leverancier.leveranciers_id = voorraadorder.leverancier_id
INNER JOIN order_medicijn
    ON order_medicijn.voorraadorder_id = voorraadorder.voorraadorder_id
INNER JOIN medicijn
    ON medicijn.artikelnr = order_medicijn.artikel_id
GROUP BY leverancier.leveranciers_id,
    medicijn.artikelnr,
    medicijn.naam,
    medicijn.in_voorraad,
    medicijn.min_voorraad
ORDER BY artikelnr

结果如下:


Leveranciers_ID / artikelnr / naam in_voorraad / min_voorraad / price

2   1   Aspirine       100  50  0.74
1   1   Aspirine       100  50  0.75
2   2   Abacivr        200  180 4.50
4   2   Abacivr        200  180 4.00
4   3   Acetazolamide  100  90  1.20
5   4   Ciclovir       145  120 0.50
3   5   levoceterizine 125  120 2.00

问题来了: 我需要什么查询才能获得相同的结果,但仅使用每个 artikelnr 价格最低的记录。所以结果会是这样的:

Leveranciers_ID / artikelnr / naam in_voorraad / min_voorraad / 价格

2   1   Aspirine       100  50  0.74


4   2   Abacivr        200  180 4.00
4   3   Acetazolamide  100  90  1.20
5   4   Ciclovir       145  120 0.50
3   5   levoceterizine 125  120 2.00

如果回答此问题需要任何其他信息,请询问我。

提前致谢

【问题讨论】:

您使用的 RDBMS 是什么? 我实际上使用了 2 个 RDBMSystems。我使用 mysqlWorkbench 并编辑我使用 phpMyAdmin 的一些值 从您的查询中删除聚合(min()) 和分组依据,然后尝试以下操作:select * from ...inner join.... 并在末尾添加 where 子句:Where order_medicijn.inkoopprijs= (select min(t2.inkoopprijs) from order_medicijn t2 where t2.artikel_id=medicijn.artikelnr) 非常感谢!这就是我一直在寻找的。​​span> 【参考方案1】:

一种可能的解决方案:添加一个内部 SQL 来计算每个 artikelnrmin 价格并使用 HAVING 子句,该子句使用内部 SQL 来过滤结果。

干杯

【讨论】:

以上是关于从连接表中选择 min的主要内容,如果未能解决你的问题,请参考以下文章

从连接表中选择计数

SQLAlchemy 仅从连接表中选择列

Propel:从别名连接表中选择列

存储过程使用连接从一个表中选择所有字段

sql [sql]从连接表中选择一个子行

MySQL - 从多个表中选择,可能没有连接?