2011-05-21 195 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 + "');