子句在哪里不明确

时间:2018-12-10 18:20:40

标签: mysql sql

使用dallasfood;

select estab_id 
from estab as EST    
left join inspect as INSP
       on EST.estab_id = INSP.estab_id    
where inspdate = '8-3-17'
  and estab_id = '2473'

试图找到如何解决estab_id的子句歧义结果。我正在尝试查找某个机构在某个日期返回的违规行为,并且无法弄清其为何不明确

2 个答案:

答案 0 :(得分:2)

在选择中使用表别名,作为两个表中的estab_id列,这就是为什么它在查询中显示歧义的原因

select EST.estab_id 
from estab as EST    
left join inspect as INSP
on EST.estab_id = INSP.estab_id    
where inspdate = '8-3-17'
and EST.estab_id = '2473'

答案 1 :(得分:1)

您应该在查询中限定所有所有列,尤其是在有多个表的情况下。

最好的别名通常是最短的-表名的缩写。另外,假设您的日期存储为日期,则应使用标准日期格式。

所以,像这样:

select e.estab_id 
from estab e left join 
     inspect i
     on e.estab_id = i.estab_id and i.inspdate = '2017-08-03'
where e.estab_id = 2473;

其他一些注意事项:

  • 我删除了2473周围的单引号。如果estab_id确实是一个字符串,请加上单引号。如果它是一个数字,那是个坏主意,因为您正在混合数据类型。
  • 我假设inspdate来自inspect,因此符合i的条件。
  • left join中第二个表上的条件通常放在on子句中。否则,该联接将变为内部联接。