使用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的子句歧义结果。我正在尝试查找某个机构在某个日期返回的违规行为,并且无法弄清其为何不明确
答案 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
子句中。否则,该联接将变为内部联接。