2012-02-22 67 views
0

是否可以从SQL语句中的子查询中提取2个结果?SQL从子查询中提取

我:

"SELECT 
    (SELECT bid FROM auction_bids WHERE itemID=a.id ORDER BY bid DESC LIMIT 1) as topbid, 
    a.* FROM auction_items a ORDER BY a.date DESC LIMIT 15" 

它返回topbid的一部分,我也希望它拉不仅bid(如topbid),而且还date(如topdate)为好。我怎样才能做到这一点?我需要另一个子查询吗?还是可以将它们合并为一个?

+0

而不是去交叉连接,,它是非常容易与上述功能SELECT * FROM T1 LEFT JOIN比较(T2,T3,T4) ON( t2.a = t1.a AND t3.b = t1.b AND t4.c = t1.c) – 2012-02-22 17:10:00

回答

0

从属子查询(取决于外部的某些值,如您的案例中的a.id)不是一种在子集中查找最大值的非常有效的方法。

而是使用子查询与GROUP BY:

SELECT b.topbid, b.topdate, a.* 
FROM auction_items a 
LEFT JOIN 
(SELECT itemID, MAX(bid) as topbid, MAX(date) as topdate 
    FROM auction_bids 
    GROUP BY itemID) b 
ON a.id = b.itemID 
ORDER BY a.date DESC 
LIMIT 15 
+0

谢谢.................... – user1022585 2012-02-22 18:56:24

+0

aegh,Im试图通过'b.topdate'和'a.date'来命令它们(当item被添加时),但它并没有命令它们正确:''SELECT b.topbid,b.topdate,a。* FROM auction_items a LEFT JOIN(SELECT itemID,MAX(bid)as topbid,MAX(date)as topdate FROM auction_bids GROUP BY itemID)b ON a.id = b.itemID ORDER BY b.topdate DESC,a.date DESC LIMIT 20“ – user1022585 2012-02-22 19:09:10