根据mysql的第一个过滤结果添加更多的表行



使用mariadb 10.5.15版本(和SQLAlchemy与python 3.9)。在用count == 3过滤下面的表之后,我将得到id为

的行2、3、4、7、12.

然后对于这些行的每一行,我想添加每一行(同一表),如果行2,3,4,7或12有相同的group_id(不包括null),但不同的group_leader值。所以我想添加

(相同的group_id,不相同的group_leader)1,3(来自id 2)5(来自id 4)10(来自id 7,并且只能来自id 10,因为group_leader必须不同)

<表类>id数group_idgroup_leadertbody><<tr>171空2311321空4321562空623空733空813空923空10531115空空123空空

您可以将count_上的过滤表与原始表连接起来,在原始表中,您可以施加两个主要条件:

  • ,group_id">
  • ,group_leader"是不同的

然后在两个结果集之间应用UNION,可选地后跟和ORDER BY子句来对id上的值排序。

考虑到NULL值和NON-NULL值既不相等也不不同,比较它们的一种方法是将NULL值转换为-1(假设该值不能被">group_leader"使用COALESCE函数值).

WITH cte AS (
SELECT * FROM tab WHERE count_ = 3
)
SELECT tab.* 
FROM       tab
INNER JOIN cte
ON tab.group_id = cte.group_id
AND COALESCE(tab.group_leader, -1) <> COALESCE(cte.group_leader, -1)
UNION 
SELECT * FROM cte
ORDER BY id

点击这里查看演示。

相关内容

  • 没有找到相关文章

最新更新