1

我有一个这样的 MYSQL 表:

STORES (SPID, StoreID, ProductID);

和这样的数据:

{ 1 | s1 | p2 }
{ 2 | s1 | p7 }
{ 3 | s1 | p8 }
{ 4 | s2 | p1 }
{ 5 | s2 | p3 }
{ 6 | s2 | p6 }
{ 7 | s2 | p9 }
{ 8 | s3 | p2 }
{ 9 | s3 | p5 }

我想:
使用 MYSQL SELECT 查询来获取结果,如果商店有某种产品,那么将返回该商店所有产品的列表。例如,如果我正在寻找“p2”,那么我想知道“s1”有“p2,p7,p8”,“s3”有“p2,p5”。

如果您需要更多信息,请告诉我。我不确定解决此问题需要什么(这可能是我无法搜索并找到答案的原因!)

4

4 回答 4

1

一种简单的方法是使用WHERE INorWHERE EXISTS方法从包含目标产品的商店列表中的商店中选择所有行。

SELECT
    StoreID
    , ProductID
FROM
    Stores
WHERE
    StoreID IN 
        (SELECT
            StoreID
        FROM
            Stores
        WHERE
            ProductID IN ('p2')
                /*also, using IN here in the sub query will allow
                you to specify more than one product in the future*/
        )

或者,您可以将表与自身连接:

SELECT
    S.StoreID
    , S.ProductID
FROM
    Stores S
    INNER JOIN Stores SProd
        ON S.StoreID = SProd.StoreID
WHERE
    SProd.ProductID IN ('p2')
于 2012-12-09T23:09:07.607 回答
1

您可以使用子查询来执行此操作:

SELECT * FROM STORES WHERE StoreID IN (SELECT StoreID FROM Stores WHERE ProductID='p2')
于 2012-12-09T23:08:15.370 回答
1

您可以通过自加入来做到这一点。请参阅SQL Fiddle进行测试。

select s1.storeid, s1.productid
from stores s1
join stores s2 on s2.storeid = s1.storeid
where s2.productid = 'p2'
于 2012-12-09T23:16:11.683 回答
0
select
  st1.store_id, st1.product_id, st2.store_id, st2.product_id
from
  stores st1
join
  stores st2 on st2.store_id = st1.store_id
where
  st1.product_id='p2'
order by store_id, product_id
于 2012-12-09T23:10:58.053 回答