Как присоединить таблицу к себе с отдельными условиями из другой таблицы - PullRequest
0 голосов
/ 23 мая 2019

В моей базе данных есть следующие таблицы:

campuses
+----+--------+----------+--------+------+
| Id | Campus | Location | County | Year |
+----+--------+----------+--------+------+
discEnr
+----------+------------+------+----+----+
| CampusId | Discipline | Year | Ug | Gr |
+----------+------------+------+----+----+
disciplines
+----+------+
| Id | Name |
+----+------+

Вопрос: Сообщите о зачислении выпускников в 2004 году по специальностям «Сельское хозяйство» и «Биологические науки» для любого университета, в котором есть выпускники.учится в обеих дисциплинах.Сообщите по одной строке на каждый университет (с двумя номерами зачисления в отдельные столбцы), сортируйте университеты в порядке убывания по количеству аспирантов «Сельское хозяйство».

Я понимаю, как сообщать либо «Сельское хозяйство», либо ««Биологические науки» следующим образом, но не вместе в одной выходной таблице

THIS WORKS FOR JUST 'Agriculture'

SELECT c.Campus, DE1.Gr Agriculture
FROM discEnr DE1
JOIN disciplines d1
  ON d1.Id = DE1.Discipline
 AND d1.Name = 'Agriculture'  
JOIN campuses c
  ON c.Id = DE1.CampusId
 AND DE1.year = 2004
ORDER BY DE1.Gr DESC;

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

SELECT c.Campus, DE1.Gr Agriculture, DE2.Gr Biology
FROM discEnr DE1
JOIN disciplines d1
  ON d1.Id = DE1.Discipline
 AND d1.Name = 'Agriculture'  
JOIN discEnr DE2
  ON DE1.CampusId = DE2.CampusId
JOIN disciplines d2
  ON d2.Id = DE2.Discipline
 AND d1.Name = 'Biological Sciences'
JOIN campuses c
  ON c.Id = DE1.CampusId
 AND DE1.year = 2004
ORDER BY DE1.Gr DESC;

В конечном итоге мой вывод должен быть в форме:

+-----------------+------------------------+--------------------+
| campuses.Campus | discEnr.Gr Agriculture | discEnr.Gr Biology |
+-----------------+------------------------+--------------------+

Любая помощь будет оценена

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Я действительно нашел решение, которое работает.Я не уверен, какой будет более элегантный способ, но это работает.Если вы знаете более короткий или более читабельный способ, пожалуйста, не стесняйтесь писать!

SELECT c.Campus, DE1.Gr Agriculture, DE2.Gr Biology
FROM discEnr DE1
JOIN disciplines d1
  ON d1.Id = DE1.Discipline
 AND d1.Name = 'Agriculture'
 AND DE1.Gr > 0

JOIN discEnr DE2
  ON DE1.CampusId = DE2.CampusId
JOIN disciplines d2
  ON d2.Id = DE2.Discipline
 AND d2.Name = 'Biological Sciences'
 AND DE2.Gr > 0

JOIN campuses c
  ON c.Id = DE1.CampusId
 AND DE1.year = 2004
ORDER BY DE1.Gr DESC;

Это на самом деле довольно близко к моему первоначальному решению, но в своем исходном сообщении я поставил d1 .Name = 'Биологические науки »вместо d2 .Name =« Биологические науки »

0 голосов
/ 23 мая 2019

вы можете использовать оператор ИЛИ.


SELECT c.Campus, DE1.Gr 
FROM discEnr DE1
JOIN disciplines d1 ON d1.Id = DE1.Discipline 
JOIN disciplines d2 ON d2.Id = DE1.Discipline 
JOIN campuses c ON c.Id = DE1.CampusId AND DE1.year = 2004
where d1.Name = 'Agriculture' or d2.Name = 'Biological Sciences'
ORDER BY DE1.Gr DESC;

Пожалуйста, предоставьте ваш образец данных для нас, чтобы уточнить ответ

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