Части таблицы, которые я просматриваю, следующие:
table: store_inventories
+---------+----------+-------+----------+
| stor_id | title_id | qty | minStock |
+---------+----------+-------+----------+
| 8042 | TC7777 | 630 | 630 |
| 8042 | TH1217 | 0 | 630 |
| 9012 | AK1231 | -100 | 13 |
| 9012 | AK4153 | 5 | 1 |
| 9012 | BU2075 | 39 | 7 |
| 7131 | AW1234 | 10277 | 2055 |
| 7131 | AW5678 | 13150 | 2630 |
| 7131 | BU1032 | 545 | 109 |
| 7131 | BU2075 | 35 | 7 |
Как я могу выбрать title_id из этой таблицы, где условия, которые будут соответствовать обеим (а не) файлам хранения 9012 и 7131.
Результат должен быть
+----------+
| title_id |
+----------+
| BU2075 |
Я попробовал внутреннее соединение и использование и утверждение, но они либо возвращают неправильный результат, либо пустой набор.
Используйте WHERE
, чтобы отфильтровать stor_ids и HAVING
чтобы подсчитать экземпляры строк в WHERE
.
SELECT title_id
FROM store_inventories
WHERE stor_ids IN (9012, 7131) --
GROUP BY title_id
HAVING COUNT(*) = 2
Используйте DISTINCT
если заголовок может содержать несколько строк одного и того же хранилища.
HAVING COUNT(DISTINCT stor_ids) = 2
Вот демо.
Вы можете попробовать подключиться к подзапросам:
SELECT a.title_id
FROM (select title_id
from store_inventories
where stor_id=9012) a
JOIN (select title_id
from store_inventories
where stor_id=7131) b
ON (a.title_id=b.title_id)