SQL左连接+一对多关系

9

我有三个表格 - node,content_type_product和share_content。在node和share_content之间可能存在1:N的关系。我想只提取每个ID一个记录。

如果share_content中有多个记录,则我希望选择最新的记录,即sc.auto_id的值最高的记录。

SELECT sc.uid, n.uid, n.nid, sc.message 
  FROM node n 
    LEFT JOIN content_type_product p ON n.nid = p.nid 
    LEFT JOIN share_content sc ON n.nid = sc.nid 
  WHERE n.nid = 40513 
  GROUP BY sc.nid
  ORDER BY sc.auto_id

您可以使用 ORDER BY sc.auto_id DESC。 - Alex M
1
如果没有模式(如CREATE TABLE语句)、样本数据(如INSERT语句)和样本数据的期望结果,那么示例就是不完整的。 - outis
如何在SQL中选择具有MAX(列值)的行,另一列DISTINCT?获取具有列的最大值的行,以及许多其他问题。 - outis
可能是一种1:N关系,也就是1:0..M对应(“一对零个或多个”)。 - onedaywhen
2个回答

6

你为什么要加入 content_type_product?

不过,先抛开这个问题,试试:

 SELECT c.uid, n.uid, n.nid, c.message  
 FROM node n  
   LEFT JOIN share_content c 
      ON c.nid = n.nid  
          And c.auto_id
             = (Select Max(auto_id)
                From share_content 
                Where nid = p.nid ) 
 Where n.nid = 40513  
 ORDER BY c.auto_id

修改了代码,因为你的子查询无法返回所需的列以进行连接,它只会返回MAX(auto_id)值。 - Francisco Soto
哦,c.auto_id=uid,message怎么办? - sonofthom
重新编辑以将其返回到提交的内容 - 因为子查询需要返回的是唯一列,添加了消息字段的代码。 - Charles Bretana

1

尝试:

SELECT sc.uid, n.uid, n.nid, sc.message FROM node n left join content_type_product p on n.nid = p.nid LEFT JOIN share_content sc on n.nid = sc.nid 
WHERE n.nid = 40513 
GROUP BY sc.nid, sc.auto_id
ORDER BY sc.auto_id DESC

谢谢 - 工作正常,但是我们只想按sc.nid分组 - 因为我们只想要一个结果。 - sonofthom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接