带子查询的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
);