仅在满足两行(非任一行)时选择条件

时间:2018-02-21 15:28:20

标签: mysql sql

我正在研究的部分内容如下:

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,其中条件将同时满足stor_ids 9012和7131的条件。

结果应为

+----------+
| title_id | 
+----------+
| BU2075   |

我尝试了内连接和使用和语句,但它们返回错误的结果或空集。

2 个答案:

答案 0 :(得分:1)

使用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

这是Demo

答案 1 :(得分:1)

您可以尝试使用子查询连接:

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)