[英]Mysql create view error 1052
你好stackoverflow人们
我有2个表,它们共享相同的属性,但类别不同。 我正在尝试仅列出具有“ Rending”属性的项目:
CREATE VIEW rending AS SELECT ranged_weapons.Name_, ranged_weapons.Dam, ranged_weapons.Dam_Type,
melee_weapons.Name_, melee_weapons.Dam, melee_weapons.Dam_Type
FROM ranged_weapons, melee_weapons
WHERE Dam_Type = 'Rending';
但是当我运行它时,我得到:
Error Code: 1052. Column 'Dam_Type' in where clause is ambiguous
我究竟做错了什么?
表信息
CREATE TABLE Ranged_weapons (
Name_ varchar (40) NOT NULL,
Class varchar (40),
Type_ varchar (40),
Range_ varchar (40),
RoF varchar (40),
Dam varchar (40),
Dam_Type varchar (10),
Pen integer ,
Clip integer ,
Rld varchar (10),
PRIMARY KEY (Name_),
FOREIGN KEY (Name_) REFERENCES Items(Name_) ON DELETE CASCADE );
CREATE TABLE Melee_weapons (
Name_ varchar (40) NOT NULL,
Type_ varchar (40),
Dam varchar (40),
Dam_Type varchar (40),
Pen integer ,
PRIMARY KEY (Name_),
FOREIGN KEY (Name_) REFERENCES Items(Name_) ON DELETE CASCADE );
就是说,这一切都意味着该列同时存在于两个表中,您需要明确提及您所指的是哪个表列
CREATE VIEW rending AS SELECT *
FROM ranged_weapons, melee_weapons
WHERE ranged_weapons.Dam_Type = 'Rending';
更新:使用上述代码,从给定的表结构中将显示重复的列名错误,因为表中的许多列名相同。
最好的办法是使用JOIN显式选择视图的列,或者如果需要从其他表中选择相同的列,然后使用不同的别名。 这是一个如何使用JOIN选择和创建视图的示例
CREATE VIEW rending AS
SELECT rw.Name_,rw.Class,rw.Type_,rw.Range_,
rw.RoF,rw.Dam,rw.Dam_Type,rw.Pen ,rw.Clip,rw.Rld
FROM ranged_weapons rw
JOIN melee_weapons mw on mw.Name_ = rw.Name_
WHERE rw.Dam_Type = 'Rending';
如果要从不同的表中为视图选择相同的列,则如何使用别名
CREATE VIEW rending AS
SELECT rw.Name_,rw.Class,rw.Type_,rw.Range_,
rw.RoF,rw.Dam,rw.Dam_Type,rw.Pen ,rw.Clip,rw.Rld,
mw.Name_ as mw_Name
FROM ranged_weapons rw
JOIN melee_weapons mw on mw.Name_ = rw.Name_
WHERE rw.Dam_Type = 'Rending';
在这里, mw.Name_ as mw_Name
将引用mw.Name_ as mw_Name
中的列,并且如果视图需要它,则可以用这种方式指定其他列名。
DAM_TYPE在两个表中都存在,这就是where子句无法识别它的原因...
您必须在where子句中使用DAM_TYPE编写table_name。
谢谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.