簡體   English   中英

MySQL創建視圖錯誤1052

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM