使用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必须不同)
您可以将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
点击这里查看演示。