BugSQL无法绑定由多个部分组成的标识符

Posted 软泡芙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BugSQL无法绑定由多个部分组成的标识符相关的知识,希望对你有一定的参考价值。

文章目录

问题

执行sql报:无法绑定由多个部分组成的标识符

原因

取了别名却没用别名,如下面这些情况

select * from biz_production_order_work_detail temp where biz_production_order_work_detail.create_time>'2023-02-13'

select biz_production_order_work_detail.create_time from biz_production_order_work_detail temp where temp.create_time>'2023-02-13'

上面是博主自己模拟测出来的,网上也有其他情况(联合查询),确实一开始出问题的代码也有进行联合查询,即文末代码:

1、联合查询的条件有重复的,未指定哪个表的字段信息
例 a表有id,b表也有id, select id from a left join b on a.id=b.id
这时候查询条件的id没有标明是哪个表的id就会出现这个问题

2、查询条件时未指定联合查询的表,查询条件就直接用另一个表的字段了
例可能在别的语言里面会有拼接sql的写法,比如java,jdbc方式,sql语句是动态的
sql: select*from a 在此基础做sql语句的拼接
理想拼接后的sql:select*from a left join b on a.id=b.id where b.id=xxx
实际拼接后的sql: select*from a where b.id=xxx
下面这情况就会造成这个错误,所以做这种拼接sql的时候打印一下sql语句是否出现问题

解决

正确使用,都用别名取数,都用表名

--都用别名
select temp.create_time from biz_production_order_work_detail temp where temp.create_time>'2023-02-13'
--都用表名
select biz_production_order_work_detail.create_time from biz_production_order_work_detail  where biz_production_order_work_detail.create_time>'2023-02-13'

拓展

查询结果字段作为另一个查询语句的字段,该查询语句里的相关表会受到外部查询条件的影响

 select base_procedure_id, plan_qty,convert(date,work.modify_time) inittime,
 --括号里的这段会受到work.modify_time > '2022-12-01' and work.modify_time < '2022-12-07' 的影响 
 ( select SUM(ok_qty) from biz_production_report, biz_production_order_work_detail
  where biz_production_report.order_work_detail_id = biz_production_order_work_detail.id
 and biz_production_order_work_detail.production_order_work_id = work.id
 and biz_production_report.report_date < work.modify_time 
 ) as 'actqty',prod_pood
 from biz_production_order_work work,biz_production_order orders
 where work.modify_time > '2022-12-01' and work.modify_time < '2022-12-07' and work.biz_production_order_id=orders.id

相关问题

救命-SQL-left join,为什么双条件不行啊

SQL语句报错,无法绑定由多个部分组成的标识符解决

无法绑定由多个部分组成的标识符, 表示在查询的时候使用了别名,并且查询的多个表中存在相同的字段,如果在使用该字段时不明确该字段的来源就会报这个错误。

举例:

  我们有两张表,B1,B2,他们有一个共同的字段id

  select id from B1 c inner join  B2 d on  c.id=d.id;

  查询时就会报无法绑定由多个部分组成的标识符id

  必须这样写

  select c.id from B1 c inner join  B2 d on  c.id=d.id;

  这样才知道c.id 是哪个值。

以上是关于BugSQL无法绑定由多个部分组成的标识符的主要内容,如果未能解决你的问题,请参考以下文章

sql语句,无法绑定由多个部分组成的标识符 "xxx"

sql中根据身份证号来计算年龄

C# 我combobox绑定了数据库中一个表中的ID 现在我要利用ID 查询对应的name 可是取不到combobox的值

sql用inner join内关联查询有多条记录一样只取一条?

怎么用SQL语句同步两个表中的字段值?

SQL 错误 无法绑定多部分标识符