2016-12-12 506 views
-1

所以這裏是我的代碼如下。子查詢返回多於1行?

qry = "SELECT * FROM `tblsubjects` WHERE `GRADELEVEL` = " & lblgrade.Text & " AND `SUBJECTNAME` <> (SELECT `SUBJECTNAME` FROM `tblschedule` WHERE `SECTIONNAME` = '" & lblsect.Text & "')" 

它來自may vb應用程序。我認爲錯誤來自查詢。我正在制定一個調度系統。在那個查詢中,我試圖加載尚未在該級別上安排的主題,並將該部分加載到組合框上。但是當我嘗試在本節中添加更多時間表時,出現此錯誤。

enter image description here 這是我對這個功能整個代碼:

Private Sub subjectload() 
     con = New MySqlConnection 
     con.ConnectionString = "server=localhost;user id=root;password='';database=kccbeslis" 
     If DataGridView.Rows.Count > 0 Then 
      Try 
       con.Open() 
       qry = "SELECT * FROM `tblsubjects` WHERE `GRADELEVEL` = " & lblgrade.Text & " AND `SUBJECTNAME` <> (SELECT `SUBJECTNAME` FROM `tblschedule` WHERE `SECTIONNAME` = '" & lblsect.Text & "')" 
       cmd = New MySqlCommand(qry, con) 
       rdr = cmd.ExecuteReader 
       While rdr.Read 
        Dim subname = rdr.GetString("SUBJECTNAME") 
        cbsubject.Items.Add(subname) 
       End While 
       con.Close() 
      Catch ex As Exception 
       MessageBox.Show(ErrorToString) 
      End Try 
     Else 
      Try 
       con.Open() 
       qry = "SELECT * FROM `tblsubjects` WHERE `GRADELEVEL` = " & lblgrade.Text & "" 
       cmd = New MySqlCommand(qry, con) 
       rdr = cmd.ExecuteReader 
       While rdr.Read 
        Dim subname = rdr.GetString("SUBJECTNAME") 
        cbsubject.Items.Add(subname) 
       End While 
       con.Close() 
      Catch ex As Exception 
       MessageBox.Show(ErrorToString) 
      End Try 
     End If 
    End Sub 

幫我請!

+0

最有可能的是,您只需要用'NOT IN'替換'<>'。 – Uueerdo

+0

嘗試在您的MS SQL子查詢中使用TOP 1,感謝很多先生,對於mysql –

回答

0

它出現你的子選擇(選擇主題名從tblscheduler其中..)有多個與您提供的'sectionname'具有相同的計劃,因此返回多個行。

您確定您的sectionname列是每個tblschedule條目唯一的嗎?嘗試一個計數和分組來看看你是否有多個記錄;

SELECT COUNT(*) FROM tblschedule GROUP BY sectionname; 

如果您需要多行,您可以嘗試用NOT IN替換<>。

+0

謝謝。我會試試這個。 – user3397424

+0

謝謝你,先生很多。當我替換<>到NOT IN錯誤不顯示。非常感謝在我的問題上的快速反應。 :) – user3397424

0

是的,這會導致您的子查詢返回多個記錄,並且<>運算符需要標量值和值列表。你還是使用NOT IN運營商像

AND `SUBJECTNAME` NOT IN (SELECT `SUBJECTNAME` FROM `tblschedule` WHERE `SECTIONNAME` = '" & lblsect.Text & "') 

順便說一句,你知道你的發佈代碼是非常脆弱的SQL注入。您應該考慮使用參數化查詢以避免相同。

+0

使用limit = 1。好吧,先生,我會嘗試搜索有關參數化的查詢。再次感謝。 – user3397424

0

使用NOT IN代替<>

QRY = 「SELECT * FROM tblsubjects WHERE GRADELEVEL =」 & lblgrade.Text & 「和主旨名稱NOT IN(SELECT主旨名稱FROM tblschedule WHERE SECTIONNAME =「」 & lblsect.Text & 「')」

+0

感謝您的快速響應先生。你們對我的論文有很大的幫助。非常感謝你。! – user3397424

1

子查詢SELECT主旨名稱FROM tblschedule WHERE SECTIONNAME = '" & lblsect.Text & "'效果比1點的記錄多。您正在使用<>而不是不使用,使用Not In子句並嘗試。