带子查询的MySQL嵌套Select语句

带子查询的MySQL嵌套Select语句,mysql,sql,mariadb,Mysql,Sql,Mariadb,我现在正在苦思冥想数据库查询两个小时。 有以下数据库结构: 文章表 +---------------+-------------+ | id | ordernumber | +---------------+-------------+ | 1 | 3243 | | 2 | 3344 | | 3 | 3423 | | 4 |

我现在正在苦思冥想数据库查询两个小时。 有以下数据库结构: 文章表

+---------------+-------------+
| 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 by和having来完成


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

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

也指定预期结果!你应该经常向我们展示你的尝试,即使它根本不起作用。复制的5是一个打字错误吗?我想这解决了我的问题。我会进一步检查这一点,并接受它作为正确的答案,当我完成检查。非常感谢它工作得完美无缺再次感谢你。但是我有一个关于这个解决方案的问题。子查询中的SELECT 1做什么?
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
                 );