在 SQL JOIN returns 中使用 Select * 错误的 id 值 table

Using Select * in a SQL JOIN returns the wrong id value for the wrong table

我有两个表(PlayerDTO 和 ClubDTO),我正在使用 JOIN 获取数据,如下所示:

SELECT * FROM PlayerDTO AS pl
INNER JOIN ClubDTO AS cl
ON pl.currentClub = cl.id
WHERE cl.nation = 7

这 returns 来自 PlayerDTO 的正确行,但在每一行中 id 列已更改为 currentClub 列(例如 pl.id 3,456 | pl.currentClub 97 变成了 pl.id 97 | pl.currentClub 97)。

所以我尝试了按名称而不是 Select *:

列出所有列的查询
SELECT pl.id, pl.nationality, pl.currentClub, pl.status, pl.lastName FROM PlayerDTO AS pl
INNER JOIN ClubDTO AS cl
ON pl.currentClub = cl.id
WHERE cl.nation = 7

这可以正常工作并且不会更改任何值。

PlayerDTO 有超过 100 列(为简洁起见,我没有在上面列出所有列,但我将它们全部包含在查询中)但显然我不想在每个查询中写下每个列名。

有人可以解释为什么 Select * 更改 id 值以及我需要做什么才能使其正常工作吗?我所有的表都有一个名为 id 的列,这与它有关吗?

SELECT *... 是,根据文档...

shorthand for “select all columns.” (Source: Dev.MySQL.com

您的两个表都有 id 列,那么应该返回哪一个?没有标明,所以MySQL猜测一下。所以 select 你想要什么 select...

SELECT pl.id, *otherfieldsyouwant* FROM PlayerDTO AS pl...

或者...

SELECT pl.* FROM PlayerDTO AS pl...

通常,SELECT * 是错误的形式。您使用每个字段的几率低得天文数字。而且你拉取的数据越多,速度就越慢。