连接3个表以进行查询

时间:2015-06-29 11:44:09

标签: c# sql database ms-access-2013

我的查询存在问题,我已经调查了它,但看起来对我来说是正确的。

所以我有3个包含以下字段的表。

Game
GameID, GameName, GenreID, ConsoleID

Genre
GenreID, GenreName

Console
ConsoleID, ConsoleName

这是我写的查询。

connection.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = connection;

string update = "SELECT Game.GameID, Game.GameName, Genre.GenreName, Console.ConsoleName "+
                "FROM Game "+
                "INNER JOIN Genre ON Game.GenreID=Genre.GenreID "+
                "INNER JOIN Console ON Game.ConsoleID=Console.ConsoleID";
command.CommandText = update;
OleDbDataAdapter da = new OleDbDataAdapter(command);
DataTable dt = new DataTable();
da.Fill(dt);
DGV_searchResults.DataSource = dt;

connection.Close();

如果我试图只使用2个表,它可以正常工作,但是3个工作会继续抛出错误。 有什么想法吗?

EDIT this is the error!

string update = "SELECT Game.GameID, Game.GameName, Genre.GenreName, Console.ConsoleName 
FROM ((Game INNER JOIN Genre ON Game.GenreID=Genre.GenreID) 
INNER JOIN Console ON Game.ConsoleID=Console.ConsoleID)";

它需要括号,因为访问一次只能连接一个表。 感谢大家的建议和帮助

2 个答案:

答案 0 :(得分:0)

即使您的字符串变量名称被调用"更新"当它做一个sql-select查询没什么大不了的,但显然混淆了别人。现在,为了处理额外的空间(或缺少空间),有时我发现使用" @"更好地做文字字符串。所以cr / lf是完整的,也可以显示更容易阅读...类似

string update = 
@"SELECT 
        Game.GameID, 
        Game.GameName, 
        Genre.GenreName, 
        Console.ConsoleName 
     FROM 
        Game 
           INNER JOIN Genre 
              ON Game.GenreID = Genre.GenreID 
           INNER JOIN Console 
              ON Game.ConsoleID = Console.ConsoleID ";

所以现在,查询中没有额外空间的混淆......并且所有原始表/别名引用都是正确的Case引用,因此您不应该有任何无效的别名引用。

即使您在引号内输入的内容看起来正确,我也遇到了编译错误的字符串内容的问题。解决所有问题的唯一方法是删除所有

   "part "+ 
   "part2 " + 
   "part3 " 

将所有连接的字符串删除回一行,如

"part part2 part3"

然后重新编译......但也许文字字符串(通过" @")也会修复它。

答案 1 :(得分:-1)

SELECT Game.GameID, Game.GameName, Genre.GenreName, Console.ConsoleName 
FROM Game 
    INNER JOIN Genre ON Game.GenreID=Genre.GenreID 
    INNER JOIN Console ON Game.ConsoleID=Console.ConsoleID;