2012-12-09 4 views
1

이 모든 것을 보여 MYSQL의이 같은 테이블이 같은
MySQL은 SELECT는 나에게 내가 가진 그들이

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 쿼리를 사용하십시오. wher e 상점에 특정 제품이 있으면 해당 상점의 모든 제품 목록이 리턴됩니다. 예를 들어 "p2"를 찾고 있다면 "s1"에는 "p2, p7, p8"이 있고 "s3"에는 "p2, p5"가 있음을 알고 싶습니다.

추가 정보가 필요하면 알려주십시오. 나는이 문제를 해결하기 위해 무엇이 필요한지 잘 모르겠어요 당신은 하위 쿼리 사용하여이 작업을 수행 할 수

답변

1

(I 검색하고 답변을 찾을 수없는 이유는 아마 어느!) :

SELECT * FROM STORES WHERE StoreID IN (SELECT StoreID FROM Stores WHERE ProductID='p2') 
+0

첫째, 간단하고 작동합니다. 고맙습니다! – tnt0932

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') 
+0

자세한 답변 해 주셔서 감사합니다. 나는 조금 더 높은 평판을 얻을하자마자 그것을 upvote거야! – tnt0932

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 
+0

빠른 답변 heximal 주셔서 감사합니다! – tnt0932

1

. 테스트를 위해서는 SQL Fiddle을 참조하십시오.

select s1.storeid, s1.productid 
from stores s1 
join stores s2 on s2.storeid = s1.storeid 
where s2.productid = 'p2' 
+0

답변과 SQL Fiddle에 감사드립니다! – tnt0932