2011-05-21 197 views
1

我想加盟1个SQL查询3个表,但我真的是“小白”与联接查询,这是我所“创造”至今:SQL加入3个表

SELECT m.Mod_ID as Modelnr, m.Mod_Naam as Modelnaam, m.Mod_Omschrijving as Omschrijving, m.Taal_ID as Taal, m.User_ID as Ontwerper 
FROM Model as m 
INNER JOIN Login as l ON m.User_ID = l.User_ID 
INNER JOIN Taal as t ON m.Taal_ID = t.Taal_ID 
WHERE m.User_ID = '" + userid + "' 

该数据库是在Visual Studio(asp.net c#),Tables:Model,Taal和Login中创建的。

  • 型号:Mod_ID,Mod_Naam,Mod_Omschrijving,Taal_ID,USER_ID
  • 塔尔:Taal_ID,塔尔
  • 登录:USER_ID,U_Naam,U_Achternaam

表&关系:http://i52.tinypic.com/2upxmbk.jpg

代码后面填写gridview:

SqlCommand objCommand = new SqlCommand("SELECT m.Mod_ID as Modelnr, m.Mod_Naam as Modelnaam, m.Mod_Omschrijving as Omschrijving, m.Taal_ID as Taal, m.User_ID as Ontwerper from Model as m INNER JOIN Login as l ON m.User_ID = l.User_ID INNER JOIN Taal as t ON t.Taal_ID = t.Taal_ID WHERE m.User_ID = '" + userid + "' ", con); 
dr = objCommand.ExecuteReader(); 
gvModel.DataSource = dr; 
gvModel.HeaderStyle.HorizontalAlign = HorizontalAlign.Left; 
gvModel.DataBind(); 

尝试使用来自Taal(Taal.Taal)的相应语言和来自Login(Login.U_Naam)的用户在gridview中显示模型。

我得到什么ATM(只有3个在DB内部型号行):http://i55.tinypic.com/2wbrcd2.jpg

但我还在想起来号ID在我的GridView控件。 任何能帮助我的人?

谢谢!

+0

你能否提供表格的模式,期望的输出以及这个信息存储在DB中的类型? – garnertb 2011-05-21 13:03:14

+0

这是使用PHP编写的,或者我们需要更多的细节 – 2011-05-21 13:05:44

+0

请原谅我的这个题外评论。嘿,恩! – bigblind 2011-05-21 13:08:26

回答

0

它在我看来像你的查询正在做它应该的 - 问题出在你的查询的“select”部分 - 一切都来自Model表。

后你做了“从”和连接,数据,你选择这个样子的:

|   these columns come from the Model table   |       these come from the User table        | Taal table | 
| Mod_ID | Mod_Naam | Mod_Omschrijving | Taal_ID | User_ID | User_ID | Username | Password | U_Naam | U_Voornaam | U_Geboorte | U_Dienst | (....) | Taal_ID | Taal | 

......你能想到的它有点像“一个大表”。所以你也希望从User和Taal表中选择一些东西 - 否则你就会让数据库做所有的工作,不加任何东西。我敢肯定,你想要的是:

SELECT m.Mod_ID as Modelnr, m.Mod_Naam as Modelnaam, m.Mod_Omschrijving as Omschrijving, 
    t.Taal as Taal, l.U_Naam as Ontwerper -- <-- this is the only bit that's different 
FROM Model as m 
INNER JOIN Login as l ON m.User_ID = l.User_ID 
INNER JOIN Taal as t ON m.Taal_ID = t.Taal_ID 
WHERE m.User_ID = @user_ID 

我也定你有SQL注入的问题,在.NET中调用此方法,这样做:

SqlCommand objCommand = new SqlCommand("SELECT .... etc", con); 
objCommand.Parameters.AddWithValue("@user_ID", userid); 
dr = objCommand.ExecuteReader(); 
// as before 
+0

非常感谢!之后它看起来非常明显.. – Nico 2011-05-21 17:19:03

1

您是在SQL工具中直接针对数据库测试此语句,还是直接在应用程序中测试它?在将它放入应用程序之前,先对数据库尝试一下。

您正在使用哪些DBMS?

+0

我直接在我的应用程序中启动它我使用var'userid'。 我正在使用Visual Studio创建的简单数据库(asp.net,c#) – Nico 2011-05-21 13:09:31

0

尝试使用这个命令没有内部连接

Select 
    m.*, l.*, t.* 
from 
    Model as m, 
    Login as l, 
    Tall as t 
Where 
    (m.User_ID = l.User_ID and m.Taal_ID = t.Taal_ID) 
    and 
    (m.User_ID = '" + userid + "');