мой sql выводит одни и те же данные более одного раза, когда я использую оператор select - PullRequest
0 голосов
/ 09 марта 2019

Я создал три таблицы «студент», «курс» и «лектор» и вставил в них данные.Теперь я хочу получить некоторые данные, выбрав.

these are the tables

Когда я хочу показать: объект взят Kumar

SELECT STUDENT.NAME, COURSE.SUBJECT1, COURSE.SUBJECT2, COURSE.SUBJECT3
FROM  STUDENT,COURSE
WHERE  STUDENT.COURSE = COURSE.COURSE  = 'MLVK'

он повторяет данные более одного раза.

Я надеюсь, что кто-нибудь поможет мне

Всего наилучшего

Ответы [ 3 ]

1 голос
/ 09 марта 2019

Научитесь использовать правильный, явный, стандартный JOIN синтаксис.

И, псевдонимы таблиц:

SELECT s.NAME, c.SUBJECT1, c.SUBJECT2, c.SUBJECT3
FROM STUDENT s JOIN
     COURSE c
     ON s.COURSE = c.COURSE
WHERE c.COURSE  = 'MLVK'
0 голосов
/ 09 марта 2019

Прежде всего, я бы посоветовал правильно смоделировать ваши данные в форме BCNF, где вы должны были смоделировать другую таблицу для сохранения предметов и составить карту лектора, который изучает этот предмет.

Пример: (таблица тем)

SubjectId      LECT_ID
----------     ------------
TT234          L123
TT235          L003

и ваша таблица курса будет, конечно, больше соответствовать предметному отображению, например:

CourseName     SubjectId
-------------  --------------
DTM            TT235
DTM            TT695
...

тогда вы используете запрос как:

Select sub.SubjectId, l.NAME
From
  Student s JOIN
  Course c
  on c.CourseName = s.COURSE
  JOIN Subject sub
  on sub.SubjectId = c.SubjectId
  JOIN Lecturer l
  on l.LECT_ID = sub.Lecturer
Where s.NAME = 'Aminah'

приведенный выше запрос будет выглядеть так:

SubjectId    NAME
---------    ----------
PP563        Ahmad
SS003        Ahmad
PP999        John         

поскольку Ахмад преподает 2 предмета в курсе DPG. но если вы хотите сообщить об отдельных лекторах для Амины, вы можете изменить запрос следующим образом:

SELECT NAME FROM Lecturer where LECT_ID 
in (
Select l.LET_ID
From
  Student s JOIN
  Course c
  on c.CourseName = s.COURSE
  JOIN Subject sub
  on sub.SubjectId = c.SubjectId
  JOIN Lecturer l
  on l.LECT_ID = sub.LECT_ID
Where s.NAME = 'Aminah'
) a
0 голосов
/ 09 марта 2019

Если бы я собирался использовать эти таблицы для выбора предметов, выбранных Кумаром, я написал бы что-то вроде:

SELECT
s.name, c.course, c.subject1, c.subject2, c.subject3
FROM
student as s 
LEFT JOIN course as c on c.course = s.course
WHERE
s.no_matrik = '23456'
GROUP BY
s.name, c.course, c.subject1, c.subject2, c.subject3

Я думаю, что эта версия делает намерение немного более ясным (выберите предмет для конкретного студента, Кумар), чем предыдущий ответ (выберите предметы для любого студента, имеющего курс = 'MLVK').Этот ответ также вернет информацию для Кумара, даже если он не имеет значения курса в таблице учеников (предварительная запись?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...