2016-01-12 3 views
0

У меня есть две таблицы: одна для списка учеников и одна таблица для сопоставления ученика с игрушками на игровых площадках.Выбор между несколькими таблицами sql

Когда я выбираю игрушку детскую площадку, я хочу, чтобы иметь возможность видеть список студентов со следующими ограничениями:

  • Студент может иметь только один тип игрушки в то время. (Ученик с баскетболом (-ами) не может появиться в списке, когда я выбираю футбольный мяч).
  • Студент с конкретной игрушкой может иметь несколько разных цветов (студент с желтым баскетболом также может иметь синий шар).

Я ищу, чтобы написать SQL-запрос или преобразовать таблицы в список C#, который выбирает из таблицы ученика, чтобы он возвращал записи, которые следуют ограничениям. Я использую структуру MVC в C# и буду вызывать запрос в контроллере с помощью метода, который уже был написан функционально.

Students 
+------------+--------------+ 
| StudentId | name   | 
+------------+--------------+ 
|  1  | Bob   | 
|  2  | Samuel  | 
|  3  | Tim   | 
| ... 
+------------+--------------+ 

PlaygroundMap 
+-----+-----------------+--------+------------+ 
| id | name   | color | studentid 
+-----+-----------------+--------+------------+ 
| 1 | basket ball  | yellow | 1 
| 2 | basket ball  | blue | 1 
| 3 | tennis ball  | black | 2 
| 4 | tennis ball  | red | 2 
| 5 | soccer ball  | purple | 3 
| ... 
+-----+-----------------+--------+------------+ 

Я все еще новичок в SQL, поэтому любая помощь будет принята с благодарностью. Благодаря!

+3

'SELECT' не собирается управлять ограничениями данных. Вам нужно управлять этим при помещении данных в таблицу. – Crowcoder

+0

«Мне нужен SQL-запрос», поэтому вы ожидаете, что мы сделаем это за вас? –

+0

Как насчет того, когда это вне стола и в списке? Если я извлечу две таблицы в список, могу ли я использовать некоторый оператор для удаления учащихся из списка на основе их идентификаторов в таблице PlaygroundMap? – JoeFromAccounting

ответ

0

вам придется сделать составной первичный ключ в таблице playgroundmap для этого на уровне базы данных между именем и studentid в playgroundMap таблицы

0

Как об использовании ниже, я думаю, что он соответствует всем требованиям.

SELECT Students.name, PlaygroundMap.Name, PlaygroundMap.color 
FROM Students 
    JOIN PlaygroundMap 
     ON Students.StudentId = PlaygroundMap 
WHERE Students.StudentID <> (
SELECT Students.StudentID 
FROM Students 
    JOIN PlaygroundMap 
     ON Students.StudentId = PlaygroundMap 
WHERE COUNT(PlaygroundMap.name) 
GROUP BY PlaygroundMap.Name) 
+0

Спасибо за ваше предложение, я рассмотрю его. – JoeFromAccounting

0
select * from student 
where StudentId NOT IN 
    (select distinct StudentId from PlaygroundMap) 
or StudentId IN 
    (select distinct StudentId from PlaygroundMap where PlaygroundMapName = @playground) 

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

  • Нет связанных вопросов^_^