内部联接后数据库 table 不显示数据
Database table not showing data after inner join
我有一个 C# windows 表单应用程序,我也在使用数据库。
我有 3 个 table:Players
、Tournaments
和 TournamentsPlayers
。
我只会在表格中显示 2 个 table,即 Tournaments
和 Players
table。 Tournaments
table 有一列是一个复选框,我想在 Players
table 中仅显示我选中该框的锦标赛的玩家。
当应用程序启动时,我有一个检查所有锦标赛的 foreach 语句,所以首先所有玩家都应该显示在 Players
table 中,但没有显示任何玩家。
我的代码是:
private void ShowPlayersForSelectedTournaments()
{
string query =
"SELECT a.Name, a.Id FROM Players a,TournamentPlayers b WHERE a.Id=b.TournamentId AND b.TournamentId=@TournamentId";
using (Connection = new SqlConnection(ConnectionString))
using (SqlCommand command = new SqlCommand(query, Connection))
using (SqlDataAdapter adapter = new SqlDataAdapter(command))
{
foreach (DataGridViewRow row in TournamentsTable.Rows)
{
if (row.Cells.Count > 0 && bool.Parse(row.Cells[0].Value.ToString()))
{
command.Parameters.AddWithValue("@TournamentId", row.Cells[1].Value);
DataTable tournamentPlayersList = new DataTable();
adapter.Fill(tournamentPlayersList);
PlayersTable.DataSource = tournamentPlayersList;
break;
}
}
}
}
我已经尝试了一个简单的 select 并且一切正常,但是使用 sql 语法它似乎不起作用。
我尝试了另一种类似的 mysql 语法,例如:
string query = "SELECT a.Name FROM Players a INNER JOIN TournamentPlayers b ON a.Id=b.TournamentId WHERE b.TournamentId=@TournamentId";
但 Players
table.
中仍然没有任何显示
我做错了什么?我的 mysql 语法或代码有问题吗?
这是您的查询:
SELECT a.Name, a.Id
FROM Players a,TournamentPlayers b
WHERE a.Id=b.TournamentId AND b.TournamentId=@TournamentId;
它有多个问题。这应该有效:
SELECT p.Name, p.Id
FROM Players p JOIN
TournamentPlayers tp
ON tp.playerId = p.id
WHERE tp.TournamentId = @TournamentId;
备注:
- 从不 在
FROM
子句中使用逗号。 始终使用正确、明确的JOIN
语法。
- 使用 table 名称的缩写,以便查询在阅读时有意义。
- 修复 table 之间的连接条件,以匹配播放器。玩家极不可能拥有与锦标赛相同的 id and 也参加了该锦标赛。可能,但不太可能。
我有一个 C# windows 表单应用程序,我也在使用数据库。
我有 3 个 table:Players
、Tournaments
和 TournamentsPlayers
。
我只会在表格中显示 2 个 table,即 Tournaments
和 Players
table。 Tournaments
table 有一列是一个复选框,我想在 Players
table 中仅显示我选中该框的锦标赛的玩家。
当应用程序启动时,我有一个检查所有锦标赛的 foreach 语句,所以首先所有玩家都应该显示在 Players
table 中,但没有显示任何玩家。
我的代码是:
private void ShowPlayersForSelectedTournaments()
{
string query =
"SELECT a.Name, a.Id FROM Players a,TournamentPlayers b WHERE a.Id=b.TournamentId AND b.TournamentId=@TournamentId";
using (Connection = new SqlConnection(ConnectionString))
using (SqlCommand command = new SqlCommand(query, Connection))
using (SqlDataAdapter adapter = new SqlDataAdapter(command))
{
foreach (DataGridViewRow row in TournamentsTable.Rows)
{
if (row.Cells.Count > 0 && bool.Parse(row.Cells[0].Value.ToString()))
{
command.Parameters.AddWithValue("@TournamentId", row.Cells[1].Value);
DataTable tournamentPlayersList = new DataTable();
adapter.Fill(tournamentPlayersList);
PlayersTable.DataSource = tournamentPlayersList;
break;
}
}
}
}
我已经尝试了一个简单的 select 并且一切正常,但是使用 sql 语法它似乎不起作用。 我尝试了另一种类似的 mysql 语法,例如:
string query = "SELECT a.Name FROM Players a INNER JOIN TournamentPlayers b ON a.Id=b.TournamentId WHERE b.TournamentId=@TournamentId";
但 Players
table.
我做错了什么?我的 mysql 语法或代码有问题吗?
这是您的查询:
SELECT a.Name, a.Id
FROM Players a,TournamentPlayers b
WHERE a.Id=b.TournamentId AND b.TournamentId=@TournamentId;
它有多个问题。这应该有效:
SELECT p.Name, p.Id
FROM Players p JOIN
TournamentPlayers tp
ON tp.playerId = p.id
WHERE tp.TournamentId = @TournamentId;
备注:
- 从不 在
FROM
子句中使用逗号。 始终使用正确、明确的JOIN
语法。 - 使用 table 名称的缩写,以便查询在阅读时有意义。
- 修复 table 之间的连接条件,以匹配播放器。玩家极不可能拥有与锦标赛相同的 id and 也参加了该锦标赛。可能,但不太可能。