MySQL вложенный оператор Select с подзапросом - PullRequest
0 голосов
/ 08 января 2019

Я борюсь с запросом к базе данных в течение 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-оператором? Я попытался с подзапросом, но безуспешно, так как подзапрос выполняется первым, и мне нужно было бы передать значения из текущей записи набора результатов внешнего запроса.

Любая помощь очень ценится.

Edit: Ожидаемый результат:

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

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Если вы хотите получить полную информацию для варианта:

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" является опечаткой и что идентификаторы действительно уникальны в таблице.

0 голосов
/ 08 января 2019

Это можно сделать с помощью group by и having.

select articleID
from variants
group by articleID
having count(*) - 1 = count(case when stock = 0 then 1 end)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...