MySQL查询一对多关系和只有一行返回

时间:2014-02-27 07:47:55

标签: mysql sql

情况
我有一个tabe userproducts存储产品,我有一个表offers,它存储产品的所有竞争对手。另外我还有另一个名为sellers的表,它存储有关卖家/竞争对手的信息。

我想要什么
我现在想要,我可以搜索我的产品,并获取lowest_pricename of this competitor的信息。

我有什么
我做到目前为止,我可以说它会给我最低价格和一个asin(=产品)的名称。在这里。

SELECT (o.price+o.shipping) AS lowest_price,
       s.seller_name AS seller_name
  FROM offers AS o
       LEFT JOIN sellers AS s
            ON (o.userinfos_id = s.userinfos_id 
                AND o.marketplace_id = s.marketplace_id 
                AND o.merchant_id = s.seller_id)
 WHERE o.userinfos_id = ? 
       AND o.marketplace_id = ? 
       AND o.asin = ? 
       AND o.merchant_id != ?
 ORDER BY 
       (o.price+o.shipping) ASC
 LIMIT 1) 

如果您在此处发现任何性能泄漏,请随时报告

缺少什么
但是,缺少的是我如何获得所有我的asins的这些信息。不只是一个人。我看不到丢失的链接。我尝试了一个解决方案,我将其设置为子查询并将其放在SELECT中,如下所示:

SELECT userproducts.*, 
       ( "HERE the query from the top ) 
  FROM userproducts 
 WHERE ...

但结果却是MySQL用这个错误消息回复了我

  

SQLSTATE [21000]:基数违规:1241操作数应包含1列

我只是想搜索我的产品,而mysql也应该回复有关lowest_price的信息。你能帮我查询一下吗?

2 个答案:

答案 0 :(得分:1)

SELECT userproducts.*, 
       topQuery.*
  FROM userproducts, 
       ( "HERE the query from the top ) topQuery
 WHERE ..

答案 1 :(得分:0)

我不知道你的表结构和连接条件,但也许这个例子很有用:

SELECT u.field1, u.field2, 
   min(o.price+o.shipping) AS lowest_price,
   s.seller_name AS seller_name
FROM userproducts u
   LEFT JOIN offers AS o
        ON o.userinfos_id = u.userinfos_id
        AND o.marketplace_id = u.marketplace_id
        AND o.asin = u.asin 
        AND o.merchant_id = u.merchant_id
   LEFT JOIN sellers AS s
        ON (o.userinfos_id = s.userinfos_id 
            AND o.marketplace_id = s.marketplace_id 
            AND o.merchant_id = s.seller_id)
 GROUP BY u.field1, u.field2, s.seller_name