我是SQL的新手,我对此感到困惑:我读到如果在选择中有两个相同的列名,你必须把表名放在列名前面。这就是为什么我不明白为什么这个查询工作,没有相同的列名(也不在表中):
select
item.brand, item.type, item.game_or_console,
count(*) as amount
from
item
join
repair on repair.barcode = item.barcode
where
brand = 'sony'
group by
item.brand, item.type, item.game_or_console
having
count (*) >=1
为什么这个相同的查询,但与where代替join不工作:
select
item.brand, item.type, item.game_or_console,
count(*) as amount
from
item i, repair r
where
r.barcode = i.barcode
and brand = 'sony'
group by
item.brand, item.type, item.game_or_console
having
count (*) >= 1
错误:
Msg 4104, Level 16, State 1, Line 9
多部分标识符"item.brand"无法绑定。Msg 4104, Level 16, State 1, Line 9
多部分标识符"item.type"无法绑定。留言4104,16层,状态1,9线等。
我尝试了两个查询,只有一个工作。但我不明白为什么一个可以而另一个不行。
关键是表别名:
select item.brand, item.type, item.game_or_console, count(*) as amount
from item i, repair r -- < here
where r.barcode = i.barcode
不再可以访问item
和repair
对象,因为它们分别被重命名为i
和r
。