首页 > 数据库 >SQL+WHERE+别名+过滤的问题 Column 'code' in where clause is ambiguous

SQL+WHERE+别名+过滤的问题 Column 'code' in where clause is ambiguous

时间:2024-04-22 09:56:30浏览次数:24  
标签:ambiguous task name Column sti code ti id

背景

有两张表,父表 task 和 子表 sub_task,它们使用id关联,并且都有自己的编号 code,但是在分页查询子任务列表时,编号需要使用父表编号+子表编号进行拼接(比如,task 表编号 为 zh001,sub_task表编号 为 01,则页面展示 为 zh001-01),并且需要根据组成的编号过滤。

问题

实际项目使用时,sql 往往很复杂,为了文章简洁明了、清晰,因此使用简化的sql说明问题

使用关联查询,并用组合的字段,起别名的方式过滤,报错提示:SQL 错误 [1052] [23000]: Column 'code' in where clause is ambiguous

select
	concat(ti.code, '-', sti.code) as code,
	sti.*,
	ti.name as task_name
from
	sub_task_info sti
left join task_info ti on
	ti.id = ti.task_id
where
	code like '%001%';

解决方案1

使用子查询,将第一次查询出来的结果,作为一个临时表,然后再做过滤。

select
    * 
from (
    select
	    concat(ti.code, '-', sti.code) as code,
    	sti.*,
    	ti.name as task_name
    from
    	sub_task_info sti
    left join task_info ti on
    	ti.id = ti.task_id
) temp
where
	code like '%001%';

解决方案2

还是使用原sql,只是在过滤时,不使用别名,而是用函数拼接。

select
	concat(ti.code, '-', sti.code) as code,
	sti.*,
	ti.name as task_name
from
	sub_task_info sti
left join task_info ti on
	ti.id = ti.task_id
where
	concat(ti.code, '-', sti.code) like '%001%';

参考链接:https://blog.csdn.net/helloworldchina/article/details/121218963

标签:ambiguous,task,name,Column,sti,code,ti,id
From: https://www.cnblogs.com/dxiaodang/p/18150037

相关文章

  • Codeforces Round 940 (Div. 2)
    这场还挺Edu的C.HowDoestheRookMove?Problem-C-Codeforces数学方法​ 我用的数学方法,卡了很久才推出来思路和式子。​ 首先行列其实等价,直接单考虑剩余\(n\)行就行。​ 这类题应该选择先选一个东西,然后处理剩下的东西。​ 这里好做的方法是先选\(m\)个......
  • 关于Python能再Pycharm上运行而在VSCode下无法运行
    前提项目是由Pycharm创建并且编写,然后复制下来VSCode上运行问题Pycharm写了一个项目,项目的某个文件A要调用到项目其他文件B的某个方法b,在上运行Pycharm没问题,VSCode复制下来该干的都干了(依赖安装,venv环境),但是运行的时候就是报错说,找不到模块B的路径,但是点引用却又能转到对应的......
  • LeetCode 1331. Rank Transform of an Array
    原题链接在这里:https://leetcode.com/problems/rank-transform-of-an-array/description/题目:Givenanarrayofintegers arr,replaceeachelementwithitsrank.Therankrepresentshowlargetheelementis.Therankhasthefollowingrules:Rankisanintegers......
  • AtCoder Beginner Contest 350 G - Mediator
    链接:https://atcoder.jp/contests/abc350/tasks/abc350_g大致题意:给出n个点,q个询问1号询问要求u,v之前加一条无向边图始终是一个森林2号询问询问是否有一个点与u,v都相邻,若有则输出该点,若无则输出0。询问强制在线。思路:在题目要求的图中,满足2号询问的点只有三种情况:要么这个......
  • Vscode使用Git图形化工具IDE
    Vscode使用Git图形化工具IDE检查是否成功安装Git环境windows搜索栏输入PowerShell,右键以管理员身份运行输入git敲击回车重新打开Vscode(已安装ssh拓展)打开任意一个工程文件夹打开Git控制栏源代码管理Ctrl+shift+G初始化储存库提交推送选择要推送的仓......
  • Codeforces 954H Path Counting
    令输入的为\(a'\),同时\(a'_0=1\)。对其做一个前缀积\(a_i=\prod\limits_{i=0}^ia'_i\),对于\(i\gen\),认为\(a_i=0\)。那么\(a_i\)就相当于是深度\(i+1\)的点的个数。同时也可以得到根的深度为\(l\)时子树内深度为\(r\)的深度的点数为\(\dfrac{a_{r-......
  • AtCoder Beginner Contest 350
    B-DentistAoki难度:⭐题目大意现在有数列1~n,现在有m次操作,每次给出一个x,如果x存在就是删去,不存在就加上;问最后数列还剩多少个;解题思路数据很小,暴力就行;神秘代码#include<bits/stdc++.h>#defineintlonglong#defineIOSios::sync_with_stdio......
  • Atcoder ABC 350 全题解
    题外话别以为博主之前几场ABC都咕咕咕了,最近状态不好,这次ABC终于回来了(也有可能是题目变容易了,有图为证)P.S.请耐心看到最后!!否则后果自负!!!AB这年头谁不会AB啊当然有。不学OI的人。C考虑选择排序,依次将$1,2,3\cdots$与它们应该在的位置进行交换。那如果真的......
  • VS CODE下编译ROS程序
    tasks.json替换如下点击查看代码{//有关tasks.json格式的文档,请参见//https://go.microsoft.com/fwlink/?LinkId=733558"version":"2.0.0","tasks":[{"label":"catkin_make:debug",//代表提示的描......
  • [leetcode 周赛] 100276. 最短路径中的边
    solution使用dijkstra算法求出顶点0到每个顶点的最小距离dp[i]然后再从n-1开始遍历,如果dp[to]+w==dp[from],这条边符合条件importjava.util.*;classSolution{publicstaticvoidmain(String[]args){Solutionsolution=newSolution();......