mysql嵌套select语句

0yg35tkg  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(385)

我正在为一个数据库查询苦苦挣扎两个小时。有以下数据库结构:article table

+---------------+-------------+
| 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  |
+----+-------------+
cpjpxq1n

cpjpxq1n1#

这可以使用 group by 以及 having .

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

56lgkhnf2#

如果您需要变体的完整信息:

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在表中是唯一的。

相关问题