2013-03-28 4 views
1

나는 이미 뭔가를 물었습니다 (그리고 해결했습니다). here 하지만 이제는 더 복잡해졌습니다. 나는 같은 BID 테이블이 있습니다다른 열과 두 개의 테이블에서 데이터 선택

Id_auction  bidder_1  winner_1 bidder_2 winner_2 item 
    1    Alice   1   Ben   1   cup 
    2    Charles   0   Alice  1   mug 
    3     Ben   1   Charles  1   pen 

을하지만 값 승자가 아닌 경우 지금은 입찰자가 값이 1 인 승자 인 경우 다른 테이블 USD

Id_auction   USD 
1     100 
2     150 
3     50 

와 정보를 가입하려는 따라서 첫 번째 경매에서는 Alice와 Ben이 승자가되고 두 ​​번째는 Alice가 이깁니다. 결과가 다음과 같이 될 수 있도록 MySQL 쿼리가 필요합니다.

Id_auction  bidder  item  bidder_number USD 
    1    Alice   cup   1   100 
    1    Ben   cup   2   100 
    2    Alice   mug   2   150 
    3    Ben   pen   1   50 
    3    Charles  pen   2   50 

고마워요! 이 테이블 USD

+0

먼저 당신이 mysqlfiddle의 내용과 테이블을 다시 만들 수 데이터 – Strawberry

+0

를 정상화? – Tschallacka

답변

4

그냥 JOIN :

SELECT sub.*, USD.USD 
FROM 
(
    SELECT 
    t1.id_auction, 
    t2.bidder_1 AS bidder, 
    t2.item, 
    1 AS bidder_number  
    FROM table1 t1 
    INNER JOIN table1 t2 ON t1.id_auction = t2.id_auction 
         AND t2.winner_1 = 1 
    UNION ALL 
    SELECT 
    t1.id_auction, 
    t2.bidder_2 AS bidder, 
    t2.item, 
    2      
    FROM table1 t1 
    INNER JOIN table1 t2 ON t1.id_auction = t2.id_auction 
         AND t2.winner_2 = 1 
) AS sub 
INNER JOIN USD ON sub.id_auction = USD.id_auction 
ORDER BY id_auction, bidder; 

Updated SQL Fiddle Demo

| ID_AUCTION | BIDDER | ITEM | BIDDER_NUMBER | USD | 
----------------------------------------------------- 
|   1 | Alice | cup |    1 | 100 | 
|   1 |  Ben | cup |    2 | 100 | 
|   2 | Alice | mug |    2 | 150 | 
|   3 |  Ben | pen |    1 | 50 | 
|   3 | Charles | pen |    2 | 50 | 
+0

+1 많은 도움이되었습니다. :) –

+1

@MahmoudGamal 이제 팬 클럽이 있습니다. :) 감사합니다! –

+0

@MugurUngureanu - 언제든지 환영합니다 :). 아니, 나는 그와 그가 나를 위해 형을 좋아하는 것을 안다. :) –

1
SELECT 
    BID.Id_auction AS Id_auction, 
    BID.bidder_1 AS bidder, 
    BID.item AS item, 
    USD.USD AS USD, 
    1 AS bidder_number 
FROM BID 
INNER JOIN USD ON BID.Id_auction=USD.Id_auction 
WHERE BID.winner_1=1 

UNION ALL 

SELECT 
    BID.Id_auction AS Id_auction, 
    BID.bidder_2 AS bidder, 
    BID.item AS item, 
    USD.USD AS USD, 
    2 AS bidder_number 
FROM BID 
INNER JOIN USD ON BID.Id_auction=USD.Id_auction 
WHERE BID.winner_2=1 

ORDER BY BID.Id_auction, budder_number 
관련 문제