Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Union功能存在问题? #545

Closed
CHENPrime-coder opened this issue Apr 10, 2024 · 2 comments
Closed

Union功能存在问题? #545

CHENPrime-coder opened this issue Apr 10, 2024 · 2 comments

Comments

@CHENPrime-coder
Copy link

环境:

  • MySQL 8
  • Ktorm 3.6.0

问题描述:

当我使用union函数尝试查询messageId大于指定ID的一条记录时,发现无论如何整个最终查询结果都只有一条。尝试将生成的SQL手动运行发现:

1
3

查询结果确实只有一条,我开始怀疑是不是少了个括号导致的,所以我尝试修改一下生成的SQL,并产生如下运行结果:

2

最后是我的DSL代码

        val currentAnswerAlias = Answer.aliased("current")
        val currentUserAlias = User.aliased("currentUser")
        val currentGroupAlias = Group.aliased("currentGroup")
        val currentTaskAlias = Task.aliased("currentTask")

        val nextAnswerAlias = Answer.aliased("next")
        val nextUserAlias = User.aliased("nextUser")
        val nextGroupAlias = Group.aliased("nextGroup")
        val nextTaskAlias = Task.aliased("nextTask")

        val query = database.from(currentAnswerAlias)
            .innerJoin(currentUserAlias, currentAnswerAlias.studentId eq currentUserAlias.id)
            .innerJoin(currentGroupAlias, currentUserAlias.groupId eq currentGroupAlias.id)
            .innerJoin(currentTaskAlias, currentAnswerAlias.taskId eq currentTaskAlias.id)
            .select(
                currentAnswerAlias.id,
                currentAnswerAlias.content,
                currentUserAlias.name,
                currentGroupAlias.name,
                currentTaskAlias.name,
            )
            .where { currentAnswerAlias.messageId eq messageId }
            .union(
                database.from(nextAnswerAlias)
                    .innerJoin(nextUserAlias, nextAnswerAlias.studentId eq nextUserAlias.id)
                    .innerJoin(nextGroupAlias, nextUserAlias.groupId eq nextGroupAlias.id)
                    .innerJoin(nextTaskAlias, nextAnswerAlias.taskId eq nextTaskAlias.id)
                    .select(
                        nextAnswerAlias.id,
                        nextAnswerAlias.content,
                        nextUserAlias.name,
                        nextGroupAlias.name,
                        nextTaskAlias.name,
                    )
                    .where { nextAnswerAlias.messageId greater messageId }
                    .limit(1)
            )
@CHENPrime-coder
Copy link
Author

想了一下后,我发现我的功能并不需要union😂。不过我确实认为这个union可能存在一定的问题

@CHENPrime-coder
Copy link
Author

存在重复issue,上午没仔细看😴 #497

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant