我正在努力进行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 |
+----+-------------+
答案 0 :(得分:1)
可以使用group by
和having
完成此操作。
select articleID
from variants
group by articleID
having count(*) - 1 = count(case when stock = 0 then 1 end)
答案 1 :(得分: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
);
注意:这假设重复的“ 5”是一个错字,并且id在表中确实是唯一的。