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

これは、自己参加で行うことができます。テストについては、 SQLFiddleを参照してください。

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 に答える
1

これは、サブクエリを使用して実行できます。

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

簡単なアプローチは、WHERE INまたはWHERE 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 に答える
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 に答える