mysql
  • vb.net
  • 2016-12-12 3 views -1 likes 
    -1

    Итак, вот мой код ниже.Sub-запрос возвращает более 1 строки?

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

    Пришло время из приложения 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

    Попробуйте использовать TOP 1 в своем подзапросе для MS SQL, используйте limit = 1 для mysql –

    ответ

    0

    Появляется ваш выбор субтитров (SELECT subjectname FROM tblscheduler где ..) имеет несколько расписаний с тем же «именем раздела», которое вы предоставляете, поэтому возвращает более 1 строки.

    Вы уверены, что столбец вашего имени уникален для входа в tblschedule? Попробуйте подсчет и группу, чтобы узнать, есть ли у вас несколько записей;

    SELECT COUNT(*) FROM tblschedule GROUP BY sectionname; 
    

    Вы можете попробовать заменить <> с NOT IN, если требуется несколько строк.

    +0

    Спасибо, сир. Я попробую это. – user3397424

    +0

    спасибо, сэр soo много. когда я заменяю <> на NOT IN, ошибка не появляется. Большое спасибо за быстрый ответ на мой вопрос. :) – user3397424

    0

    Да, это приводит к тому, что ваш подзапрос возвращает более 1 записи, а оператор <> ожидает скалярное значение и список значений. Вы должны лучше использовать NOT IN оператор как

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

    Кстати, вы знаете, что ваш код размещен очень уязвимы для SQL Injection. Вы должны рассмотреть возможность использования параметризованных запросов, чтобы избежать их.

    +0

    спасибо большое сэр !. ok sir, я попытаюсь выполнить поиск по параметризованным запросам. Еще раз спасибо. – user3397424

    0

    Использование NOT IN вместо <>

    QRY = "SELECT * FROM tblsubjects WHERE GRADELEVEL =" & lblgrade.Text & "И Subjectname NOT IN (SELECT Subjectname FROM tblschedule WHERE = имя раздела«& lblsect.Text & "')"

    +0

    спасибо за быстрый ответ сэр. вы, ребята, очень сильно помогаете моему тезису. – user3397424

    1

    Subquery SELECT Subjectname FROM tblschedule WHERE= '" & lblsect.Text & "' результаты имя раздела более чем 1 записей. Вы используете <> вместо того, чтобы не использовать, используйте пункт «Не в» и попробуйте.

    Смежные вопросы