【问题标题】:Select data from different columns从不同的列中选择数据
【发布时间】:2013-02-14 12:56:47
【问题描述】:

我有一张桌子: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,如果不是中标者,则值为 0。因此,在第一次拍卖中,Alice 和 Ben 是赢家,在第二次拍卖中只有 Alice 获胜。我需要一个 MySQL 查询,所以结果会是这样的:

Id_auction       bidder        item      bidder_number
1                Alice         cup            1
1                Ben           cup            2
2                Alice         mug            2
3                Ben           pen            1
3                Charles       pen            2

谢谢!

【问题讨论】:

    标签: mysql sql select join


    【解决方案1】:

    试试这个:

    SELECT *
    FROM
    (
      SELECT 
        t1.id_auction,
        t2.bidder_1 AS bidder,
        t2.item
      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
      FROM table1 t1
      INNER JOIN table1 t2  ON t1.id_auction = t2.id_auction
                           AND t2.winner_2 = 1
    ) AS sub
    ORDER BY id_auction;
    

    SQL Fiddle Demo

    这会给你:

    | ID_AUCTION |  BIDDER | ITEM |
    -------------------------------
    |          1 |   Alice |  cup |
    |          1 |     Ben |  cup |
    |          2 |   Alice |  mug |
    |          3 | Charles |  pen |
    |          3 |     Ben |  pen |
    

    更新 1

    只需在第一个查询中选择一个值为 1 的新列 bidder_number,在第二个查询中选择 2,如下所示:

    SELECT *
    FROM
    (
      SELECT 
        t1.id_auction,
        t2.bidder_1 AS bidder,
        t2.item,
        1 AS bidder_number        -- <---------- This is the new column
      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                         -- < --------- with value 2 for bidders 2
      FROM table1 t1
      INNER JOIN table1 t2  ON t1.id_auction = t2.id_auction
                           AND t2.winner_2 = 1
    ) AS sub
    ORDER BY id_auction, bidder;
    

    这会给你:

    | ID_AUCTION |  BIDDER | ITEM | BIDDER_NUMBER |
    -----------------------------------------------
    |          1 |   Alice |  cup |             1 |
    |          1 |     Ben |  cup |             2 |
    |          2 |   Alice |  mug |             2 |
    |          3 |     Ben |  pen |             1 |
    |          3 | Charles |  pen |             2 |
    

    SQL Fiddle Demo

    【讨论】:

    • @Mahmoud Gamal - 你能再帮我一次吗?我需要修改您的查询,以便知道投标人的数量。在您的演示中,它将是 ID_AUCTION 1 上 Alice 的值为 bidder_1、ID_AUCTION 1 上 Ben 的 bidder_2 等的另一个字段。对不起!
    • @MugurUngureanu - 当然,任何时候。但是,对不起,我不明白。您能否编辑您的问题并向我展示您想要的结果?这将非常有帮助。
    • 谢谢。我编辑了这个问题。我想知道拍卖的获胜者是第一个投标人(bidder_1),第二个(bidder_2)等等。我必须对你说实话,这只是查询的一部分,表更复杂,但我知道如何解决其余的问题。 :)
    • 当然!再次感谢你! :)) 度过一个美好而宁静的下午!
    • @MugurUngureanu - 随时欢迎你 :) 祝你有个愉快而宁静的下午,但现在是晚上 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 2022-01-09
    • 2015-12-04
    相关资源
    最近更新 更多