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

MySQL查询一对多关系,只返回一行,mysql,sql,Mysql,Sql,形势 我有一个表userproducts,用于存储产品,还有一个表offers用于存储产品的所有竞争对手。另外,我还有一个名为sellers的表,其中存储了有关卖家/竞争对手的信息 我想要什么 我现在想,我可以通过我的产品搜索,也可以获得最低价格的信息,以及这个竞争对手的名字 我拥有的 我做到了这一点,我可以说它会给我一个asin(=产品)的最低价格和名称。给你 SELECT (o.price+o.shipping) AS lowest_price, s.seller_name A

形势
我有一个表
userproducts
,用于存储产品,还有一个表
offers
用于存储产品的所有竞争对手。另外,我还有一个名为
sellers
的表,其中存储了有关卖家/竞争对手的信息

我想要什么
我现在想,我可以通过我的产品搜索,也可以获得最低价格的信息,以及这个竞争对手的名字

我拥有的
我做到了这一点,我可以说它会给我一个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) 
如果您在这里看到任何性能泄漏,请随时报告

缺少什么
但我缺少的是如何为我所有的ASIN获取这些信息。不仅仅是一个人。我看不到丢失的链接。我尝试了一种解决方案,将其添加到子查询中,并将其放入
SELECT
中,如下所示:

SELECT userproducts.*, 
       ( "HERE the query from the top ) 
  FROM userproducts 
 WHERE ...
但结果是,MySQL给了我这个错误消息

SQLSTATE[21000]:基数冲突:1241个操作数应包含1列


我只想搜索我的产品,mysql也应该给我返回关于
最低价格的信息。您能帮我进行查询吗?

我不知道您的表结构和联接条件,但这个示例可能会有用:

SELECT userproducts.*, 
       topQuery.*
  FROM userproducts, 
       ( "HERE the query from the top ) topQuery
 WHERE ..
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

您的问题不清楚,但您需要的是所有产品的最低价格,而不是一个产品的最低价格,因此您可以使用
选择最低价格(o.price+o.shipping)]。。。。。按o.asin`remove
LIMIT 1和o.asin=?
分组我想,我庆祝得有点早了。此时,他会退回正确的产品,也会退回最低的价格,但不是针对特定的产品,而是针对相同的产品。我必须在我的
topQuery
上更改什么?那么您不需要限制1,而是应该计算每个产品id的卖家名称和最低价格。我猜您应该在顶部查询中添加GROUP BY product id,然后您可以加入userproducts和topQuery on product id