2012-06-12 31 views
1

我有這樣的SQL字符串:SQL JOIN錯誤在vb.net

Dim sqlQuery As String = "SELECT TOP 1 ID, FName, FoodGroup, Calories, Protein, Carbohydrates, Fat, category.ID" & 
     " FROM food where Protein<='" & txtProt.Text.ToString() & "' and FoodGroup = 4 " & "and category.ID = 1 " & "JOIN foodCategory ON food.ID = foodCategory.Food_ID" & "JOIN category ON foodCategory.Category_ID = category.ID " & "ORDER BY NEWID() " 

什麼我想要做的是這樣的:我想從表中「食物」鍵入值「FName參數」到textBox中,其中表「類別」的「ID」字段爲1.

我有3個表格。第一個是餐桌,第二個是桌子類,第三個是食品類。 表foodCategory具有從前兩個表到一對多關係的ID。 我收到以下錯誤:JOIN附近的語法不正確。 我做錯了什麼?

回答

3

查詢不正確,聯接已被內FROM子句中,不能在WHERE子句中設置。

+0

非常感謝。我應該看到... – Pantheo

0

這也可能是您的連接:

... foodCategory.Food_ID" & "JOIN category ... 

將評估爲

foodCategory.Food_IDJOIN category 
1

嘗試以下查詢

dim sqlQuery As String 
sqlQuery = "SELECT TOP 1 ID, FName, FoodGroup, Calories, Protein, " & _ 
      "Carbohydrates, Fat, category.ID " &_ 
      "FROM food JOIN foodCategory ON " & _ 
      "food.ID = foodCategory.Food_ID JOIN category ON " & _ 
      "foodCategory.Category_ID = category.ID " & _ 
      "where Protein<='" & txtProt.Text.ToString() & "' and " & _ 
      "FoodGroup = 4 and category.ID = 1 " & _ 
      "ORDER BY NEWID() " 

而且你應該看看參數爲你的代碼是SQL注入非常脆弱的!

+0

這個查詢是錯誤的,你不能在where子句中連接表。 –

+0

啊thx,只是看到了錯誤複製和粘貼 –

+0

「和」是沒有必要的。否則代碼工作。感謝關於SQL注入的警告! – Pantheo

0

您的加入必須在WHERE子句前:

" FROM food" & " JOIN foodCategory ON food.ID = foodCategory.Food_ID" & "JOIN category ON  foodCategory.Category_ID = category.ID " & " WHERE Protein<='" & txtProt.Text.ToString() & "' and FoodGroup = 4 " & "and category.ID = 1 " & " ORDER BY NEWID() ";