繁体   English   中英

MySQL带有子查询的嵌套选择语句

[英]MySQL nested Select statement with subquery

我正在努力进行2小时的数据库查询。 数据库结构如下:文章表

+---------------+-------------+
| id            | ordernumber |
+---------------+-------------+
|             1 |        3243 |
|             2 |        3344 |
|             3 |        3423 |
|             4 |        7687 |
+---------------+-------------+

变型表

+----+-----------+-------+-------+
| id | articleId | stock | price |
+----+-----------+-------+-------+
|  1 |         1 |     3 | 10,99 |
|  2 |         1 |     0 | 10,99 |
|  3 |         1 |     1 | 10,99 |
|  4 |         2 |     0 | 11,99 |
|  5 |         2 |     0 | 11,99 |
|  6 |         2 |     1 | 11,99 |
+----+-----------+-------+-------+

我想获得所有文章,其中除一个变体外所有其他都具有0库存。 使用普通的sql语句甚至可能吗? 我尝试了一个子查询,但是没有成功,因为该子查询首先执行,并且我需要传递外部查询结果集的当前记录中的值。

任何帮助深表感谢。

编辑:预期结果:

+----+-------------+
| id | ordernumber |
+----+-------------+
|  2 |       3344  |
+----+-------------+

可以使用group byhaving来完成。

select articleID
from variants
group by articleID
having count(*) - 1 = count(case when stock = 0 then 1 end)

如果您需要有关变体的完整信息,请执行以下操作:

select v.*
from variants v
where v.stock > 0 and
      not exists (select 1
                  from variants v2
                  where v2.articleID = v.articleID and
                        v2.stock > 0 and
                        v2.id <> v.id
                 );

注意:这假定重复的“ 5”是错字,并且id在表中确实是唯一的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM