在 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 *
是错误的形式。您使用每个字段的几率低得天文数字。而且你拉取的数据越多,速度就越慢。
我有两个表(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 *
是错误的形式。您使用每个字段的几率低得天文数字。而且你拉取的数据越多,速度就越慢。