Нахождение правильного SQL запроса - PullRequest
0 голосов
/ 21 января 2020

Предположим, у меня есть эти таблицы:

- LEARNERS: LEARNER_ID, LEARNER_NAME
- PACKAGE: PACKAGE_ID, PACKAGE_NAME
- LEARNER_PACKAGES: LEARNER_ID (From LEARNERS table), 
  PACKAGE_ID (From PACKAGE table), DUE_DATE, DATE_COMPLETED (NULLABLE)

Я хотел бы создать запрос SQL, чтобы вернуть все пакеты для каждого учащегося:

Для LEARNER_ID 123 вернуть все его пакеты:

LEARNER_NAME, PACKAGE_NAME, DUE_DATE, DATE_COMPLETED

Я пробовал это:

SELECT DISTINCT p.PACKAGE_NAME, lp.PACKAGE_ID, lp.DUE_DATE, lp.DATE_COMPLETED 
FROM LEARNER_PACKAGES lp,
     PACKAGE p
WHERE lp.LEARNER_ID = 123 AND
      lp.PACKAGE_ID = p.ID;

Возвращает неожиданный результат, только часть желаемого результата. Но я понятия не имею, что попробовать дальше.

Oracle express 12.

Ответы [ 4 ]

0 голосов
/ 21 января 2020

ВЫБРАТЬ DISTINCT p.PACKAGE_NAME, lp.PACKAGE_ID, lp.DUE_DATE, lp.DATE_COMPLETED ИЗ ПАКЕТА p, LEARNER_PACKAGES lp ГДЕ lp.PACKAGE_ID = p.PACKAGE_ID И lp.LEARNER_ID = 123 * 123;

0 голосов
/ 21 января 2020

Ваш запрос выглядит правильно, но лучше написать с помощью JOIN:

SELECT p.PACKAGE_NAME, lp.PACKAGE_ID, lp.DUE_DATE, lp.DATE_COMPLETED 
FROM LEARNER_PACKAGES lp JOIN
     PACKAGE p
     ON lp.PACKAGE_ID = p.ID
WHERE lp.LEARNER_ID = 123 ;

Можете ли вы объяснить проблемы, которые возникают у вас с этим запросом?

0 голосов
/ 21 января 2020

Я попытался запустить его на другом компьютере, и, похоже, он работает правильно.

Однако я принимаю ваш совет и буду использовать JOIN.

SELECT p.PACKAGE_NAME, lp.PACKAGE_ID, lp.DUE_DATE, lp.DATE_COMPLETED 
FROM LEARNER_PACKAGES lp JOIN
     PACKAGE p
     ON lp.PACKAGE_ID = p.ID
WHERE lp.LEARNER_ID = 123 ;

Спасибо и @Jobin и @Gordon Linoff за запрос.

0 голосов
/ 21 января 2020

Похоже, единственное, что вам нужно из таблицы пакетов - это имя пакета. Вы пытались получить данные, не присоединяясь к таблице пакетов? Это поможет определить, является ли объединение проблемой или чем-то еще.

Я бы также исключил вторую строчку из вас, где утверждение, как было бы указано в соединении, если вы собираетесь протестировать удаление объединения.

Я бы также использовал явный синтаксис соединения и протестируйте присоединение по packageID или имени, чтобы увидеть ответ ваших результатов.

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