2013-03-28 41 views
1

我已经问过(并解决了)一些近似的问题 here 但现在比较复杂。我有相同的出价表:从不同栏目和两个表格中选择数据

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 

但现在我想加入与另一个表USD

Id_auction   USD 
1     100 
2     150 
3     50 

的资料。如果投标人是一个胜利者的值是1,如果不是一个胜利者的价值因此,在第一次拍卖中,爱丽丝和本是赢家,仅次于爱丽丝获胜。我将需要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 

谢谢!

+0

首先正常化数据 – Strawberry

+0

你能重新在mysqlfiddle内容的表? – Tschallacka

回答

4

只是JOIN与此表USD

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