我想用我所拥有的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
请帮忙。
答案 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
我通过使用"选择不同的"解决了它,但是从不会因忘记使用不同的功能而给予太多痛苦......