使用三个表在SQL中创建视图

时间:2014-12-17 12:25:26

标签: mysql sql view

我想用我所拥有的3张桌子的所有记录来查看..但我收到错误而且我不知道如何解决它。

错误是Customer.customerID重复。

Create view overview as
Select
customer.customerID,
customer.username, 
customer.name, 
customer.surname, 
customer.city, 
customer.street, 
customer.zipcode, 
customer.birthdate, 
customer.`payment method`,
customer.screenname,
order.OrderID,
order.customerID,
order.date,
order.GameID,
games.GameID,
games.game,
games.price,
games.released,
games.genre,
games.grid
FROM customer
INNER JOIN order
ON customer.customerID = order.customerID
INNER JOIN games
ON games.GameID = order.GameID

表及其行:

顺序 OrderID,customerID,date,GameID

游戏 GameID,游戏,价格,发布,流派,网格

客户 customerID,username,name,surname,city,street,zipcode,birthdate,payment method,screenname

请帮忙。

4 个答案:

答案 0 :(得分:1)

CustomerID列选择了两次,名称相同,您必须使用别名AS ...为其中一个提供不同的名称,如下所示:

Create view overview as
Select
customer.customerID,
customer.username, 
customer.name, 
customer.surname, 
customer.city, 
customer.street, 
customer.zipcode, 
customer.birthdate, 
customer.`payment method`,
customer.screenname,
order.OrderID,
order.customerID AS OrderCustomerId, -- this
order.date,
order.GameID,
games.GameID gamesGameID,           -- This too
games.game,
games.price,
games.released,
games.genre,
games.grid
FROM customer
INNER JOIN order
ON customer.customerID = order.customerID
INNER JOIN games  ON games.GameID = order.GameID

或者从select中删除它,因为它与Customers.CustomerId的值相同。

答案 1 :(得分:0)

结果集中有两列名称相同的列CustomerId。试试这个:

Create view overview as
Select
customer.customerID as CustomerId1,
customer.username, 
customer.name, 
customer.surname, 
customer.city, 
customer.street, 
customer.zipcode, 
customer.birthdate, 
customer.`payment method`,
customer.screenname,
order.OrderID,
order.customerID as CustomerId2,
order.date,
order.GameID,
games.GameID,
games.game,
games.price,
games.released,
games.genre,
games.grid
FROM customer
INNER JOIN order
ON customer.customerID = order.customerID
INNER JOIN games
ON games.GameID = order.GameID

答案 2 :(得分:0)

select中有重复的列。除了CustomerId之外,您还有GameId。只需列出一列:

Select
    customer.customerID,
    customer.username, 
    customer.name, 
    customer.surname, 
    customer.city, 
    customer.street, 
    customer.zipcode, 
    customer.birthdate, 
    customer.`payment method`,
    customer.screenname,
    `order`.OrderID,
    `order`.date,
    `order`.GameID,
    games.game,
    games.price,
    games.released,
    games.genre,
    games.grid

重复项是不必要的,因为join条件无论如何都会使它们相同。

作为一个说明; order是表的一个非常糟糕的名称,因为它是一个保留字。您应该避免对表名和列名使用保留字。然后需要在查询中对它们进行转义,这会使查询变得混乱。

顺便说一下,对于这种类型的查询,如果您希望三个表中的所有列都没有重复,则可以将*using子句一起使用:

创建视图概述为     选择 *     来自客户INNER JOIN          order          使用(CustomerId)INNER JOIN          游戏          使用(GameID)

答案 3 :(得分:0)

我删除了像@Mahmoud_Gamal建议的双重命名行,但是它给了我一个问题,即SQL使用其他记录中的数据创建每个组合的记录,如:

客户1 |订单1 |的Game1

客户2 |订单1 |的Game1

客户1 |订单2 | GAME2

我通过使用"选择不同的"解决了它,但是从不会因忘记使用不同的功能而给予太多痛苦......