Mysql SQL:联接两个表,从第一个表中每个条件只得到一个结果

Mysql SQL:联接两个表,从第一个表中每个条件只得到一个结果,mysql,sql,join,multiple-tables,Mysql,Sql,Join,Multiple Tables,我有以下表格: 拍卖台 Id | Title | Description ------------------------ 1 | Test1 | DescriptionForTest1 2 | Test2 | DescriptionForTest2 3 | Test3 | DescriptionForTest3 及 投标表 AuctionId | UserId | Bidding ---------------------------- 1 | 2 | 10

我有以下表格:

拍卖台

Id | Title | Description 
------------------------
1  | Test1 | DescriptionForTest1
2  | Test2 | DescriptionForTest2
3  | Test3 | DescriptionForTest3

投标表

AuctionId | UserId | Bidding
----------------------------
1         | 2      | 10
1         | 32     | 24
1         | 2      | 30
1         | 46     | 50
2         | 13     | 5
2         | 20     | 10
and so on...
现在我想要一个输出,与此类似

AuctionId | Title | Description | UserId
----------------------------------------
1         | Test1 | Desc...     | 46
2         | Test2 | Desc...     | 20
我需要与最高出价的用户ID每拍卖一行

我知道我可以用两条SQL语句来实现这一点。首先获得所有拍卖,其次是MAX(竞价)。但是我需要在一个语句中使用它,我正在努力获得一个可以工作的SQL语句

谁能帮我一下吗

我使用MySQL作为DBMS

SELECT MAX(BINDING),A.AUCTION_ID,A.DESCRIPTION,A.TITLE,B.USER_ID 
FROM AUCTION_TABLE A,BIDS_TABLE B
WHERE A.AUCTION_ID=B.AUCTION_ID
或者尝试使用连接

SELECT MAX(BINDING),A.AUCTION_ID,A.DESCRIPTION,A.TITLE,B.USER_ID 
FROM AUCTION_TABLE A
INNER JOIN BIDS_TABLE B ON A.AUCTION_ID=B.AUCTION_ID
或者尝试使用连接

SELECT MAX(BINDING),A.AUCTION_ID,A.DESCRIPTION,A.TITLE,B.USER_ID 
FROM AUCTION_TABLE A
INNER JOIN BIDS_TABLE B ON A.AUCTION_ID=B.AUCTION_ID

草莓的答案是单向的。这是第二条路。两个都试试,看看哪一个在你的设置中更快。索引和表大小将产生很大的不同

SELECT High_Bid.AuctionId, A.Title, A.Description, High_Bid.UserID FROM
(
    SELECT * FROM
    (
        SELECT * FROM bids_table
        ORDER BY AuctionId, Bidding DESC
    ) AS B1
    GROUP BY AuctionId
) AS High_Bid
JOIN
auction_table AS A
ON High_Bid.AuctionId=A.Id

草莓的答案是单向的。这是第二条路。两个都试试,看看哪一个在你的设置中更快。索引和表大小将产生很大的不同

SELECT High_Bid.AuctionId, A.Title, A.Description, High_Bid.UserID FROM
(
    SELECT * FROM
    (
        SELECT * FROM bids_table
        ORDER BY AuctionId, Bidding DESC
    ) AS B1
    GROUP BY AuctionId
) AS High_Bid
JOIN
auction_table AS A
ON High_Bid.AuctionId=A.Id
查询:

SELECT t.*
FROM (
SELECT a.Id AS AuctionId,
       a.Title,
       a.Description,
       (SELECT b.UserId 
        FROM Bids b
        WHERE b.AuctionId  = a.Id
        ORDER BY b.Bidding DESC
        LIMIT 1) as UserId
FROM Auction a) t
WHERE T.UserID is not null
结果:

| AUCTIONID | TITLE |         DESCRIPTION | USERID |
----------------------------------------------------
|         1 | Test1 | DescriptionForTest1 |     46 |
|         2 | Test2 | DescriptionForTest2 |     20 |
查询:

SELECT t.*
FROM (
SELECT a.Id AS AuctionId,
       a.Title,
       a.Description,
       (SELECT b.UserId 
        FROM Bids b
        WHERE b.AuctionId  = a.Id
        ORDER BY b.Bidding DESC
        LIMIT 1) as UserId
FROM Auction a) t
WHERE T.UserID is not null
结果:

| AUCTIONID | TITLE |         DESCRIPTION | USERID |
----------------------------------------------------
|         1 | Test1 | DescriptionForTest1 |     46 |
|         2 | Test2 | DescriptionForTest2 |     20 |

它使用以下sql:

select ID, Title, Description, UserId from Auction a 
right join Bids b on a.ID = b.AuctionId
right join (select AuctionId, max(Bidding) as Bidding from Bids group by AuctionId) c on b.AuctionId = c.AuctionId and b.Bidding = c.Bidding;
小提琴在这里:

与第三个用户的结果:

ID  TITLE   DESCRIPTION             USERID
1   Test1   DescriptionForTest1     46
2   Test2   DescriptionForTest2     20
3   Test3   DescriptionForTest3     23

它使用以下sql:

select ID, Title, Description, UserId from Auction a 
right join Bids b on a.ID = b.AuctionId
right join (select AuctionId, max(Bidding) as Bidding from Bids group by AuctionId) c on b.AuctionId = c.AuctionId and b.Bidding = c.Bidding;
小提琴在这里:

与第三个用户的结果:

ID  TITLE   DESCRIPTION             USERID
1   Test1   DescriptionForTest1     46
2   Test2   DescriptionForTest2     20
3   Test3   DescriptionForTest3     23

请注意,此方法没有文档记录(除非您计算手册相关页面的
注释部分),并且实际上依赖于MySQL设计的特性。也就是说,其他流行的“黑客”也可以这么说,这并不是完全无视解决方案的理由。但它的执行速度不可能比上面的“文档化”解决方案快得多。请注意,此方法没有文档化(除非您计算手册相关页面的
注释
部分),并且实际上依赖于MySQL设计的特性。也就是说,其他流行的“黑客”也可以这么说,这并不是完全无视解决方案的理由。但它的执行速度不太可能比上面的“文档化”解决方案快得多。