使用mariadb版本10.5.15(以及SQLAlchemy和python 3.9).

2、3、4、7和12.

如果第2、3、4、7或12行具有相同的group\U id(不包括null),但group\U leader值不同,那么对于这些行中的每一行,我想添加(同一表中的)每一行.所以我想补充一点

(相同的group\u id,不同的group\u leader)

id count group_id group_leader
1 7 1 null
2 3 1 1
3 2 1 null
4 3 2 1
5 6 2 null
6 2 3 null
7 3 3 null
8 1 3 null
9 2 3 null
10 5 3 1
11 5 null null
12 3 null null

可以先做 Select 吗...从…起哪里然后添加这些其他行,或者我必须先做一些类似join的事情吗?

这是一个实际示例:

def query_positions(position_filter: dict):
    result = db.session.query(Positions).join(
    ProjectCrafts, Positions.project_craft_id == ProjectCrafts.project_craft_id).join(
        Projects, Positions.project_id == Projects.project_id
    )
    if "firm_id" in position_filter:
        result = result.filter(Positions.firm_id == position_filter["firm_id"])
    if "craft" in position_filter:
        result = result.filter(ProjectCrafts.craft == position_filter["craft"])
    if "craft_name" in position_filter:
        result = result.filter(ProjectCrafts.craft_name == position_filter["craft_name"])

    positions1 = aliased(Positions)
    result = result.join(positions1, Positions.is_parent == 1, Positions.family_id == positions1.family_id).join(
        Positions.family_id == positions1.family_id)
positions = result.all()
return positions

问题出现在positions1 = aliased(Positions)之后,我得到了这个错误

...

在_join\u determine\u implicit\u left\u side

推荐答案

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

  • "group_id"是相同的
  • "group_leader"不同

然后在两个结果集之间应用UNION,后面可选地跟着and ORDER BY子句,以对id上的值进行排序.

假设空值和非空值既不相等也不不同,比较它们的一种方法是使用COALESCE函数将空值转换为-1(假设该值不能由"group_leader"值使用).

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

判断演示here.

Mysql相关问答推荐

查找关联数据库表的超集

了解查询中ORDER BY的行为

如何在使用VALUES()插入时指定jOOQ中的行别名

MySQL工作台的编码问题

错误:此查询集包含对外部查询的引用,并且只能在子查询中使用

对匹配两个或多个表的表结果进行排序

为什么我的 SQL 查询不更新 Node.js 和 MySQL 中用户以外的用户属性?

Select 构成每天聚合 MAX 的各个行

将 Cloud Function (nodejs) 连接到 CloudSQL mySQL 数据库

如何使用等于、喜欢和不等于在 json 字段上编写查询?

使用索引进行查询优化

为什么没有创建此触发器?

mysql 执行注释部分

从 2 个不同的表中获取数据并将它们加入 sql

MySQL - 计算行重复的最大计数

如何在 MySQL 中搜索多个列?

docker-entrypoint-initdb 中的 MySQL 脚本未执行

MySQL - 表'my_table'没有被锁定表锁定

Ubuntu 中的 MySQL JDBC jar 文件在哪里?

从另一个表中 Select 具有 id 的行