Выбор из нескольких таблиц с использованием только команд SELECT, FROM и WHERE? - PullRequest
0 голосов
/ 21 апреля 2019

Вопрос SQL / базы данных о больнице из предыдущего экзаменационного листа включает две таблицы:

  • A Patient таблица с указанием имени, фамилии и идентификатора прихода, которому они в настоящее время назначены.
  • Таблица Ward, в которой указаны идентификатор и имя прихода, а также другие общие атрибуты.

Вопрос звучит так:

"Используя команды SQL SELECT, FROM, WHERE, напишите оператор SQL, чтобы запросить в таблицах базы данных имя, фамилию и номер медицинского состояния всех пациентов в отделении Виктория."

Так что мне нужно

SELECT forename, surname, condition 
FROM patients 
WHERE ward == "Victoria"

Но это невозможно, поскольку у пациента нет атрибута ward, только wardID, и ради этого вопроса предполагается, что мы не знаем идентификатор отделения "Виктория".

Так что мне нужно выбрать каждого пациента, где Patient.WardID соответствует Ward.WardID в «Виктории», без использования INNER JOIN, что, как я думаю, из моего чтения, будет нормальным способом сделать это.

Как мне это сделать? Спасибо

РЕДАКТИРОВАТЬ: Я изначально произвел это, однако я не думаю, что это правильно.

SELECT patient.forename, patient.surname, patient.condition 
FROM patient, ward 
WHERE patient.WardID = ward.WardID 
  AND Ward.name == "Victoria"

Ответы [ 2 ]

2 голосов
/ 21 апреля 2019

Вы можете использовать соединение

  SELECT
      p.forename
      p.surname,
      p.condition
  FROM patient p
  INNER JOIN ward w ON p.WardID = w.WardID 
    AND w.name = 'Victoria'

бит для запроса экспликации. Помните, что соединение - это эквивалент условия where ... если вы не хотите, чтобы соединение ... вы можете просто использовать старый (до 1992 года) синтаксис SQL

 SELECT
      p.forename
      p.surname,
      p.condition
  FROM patient p, ward w
  WHERE p.WardID = w.WardID 
    AND w.name = 'Victoria'
2 голосов
/ 21 апреля 2019

Вы можете использовать коррелированный подзапрос, чтобы найти имя отделения:

SELECT
    p.forename
    p.surname,
    p.condition
FROM patient p
WHERE p.WardID = (SELECT WardID FROM ward w
                  WHERE p.WardID = w.WardID AND w.name = 'Victoria');

Я ввел псевдонимы таблиц в запрос, чтобы сделать его более кратким и легким для чтения.Но обратите внимание, что написание вашего запроса с внутренним объединением, вероятно, является предпочтительным и наиболее эффективным способом сделать это.Вы должны рассматривать этот вопрос как просто головоломку, чтобы убедиться, что ваш SQL достаточно гибок.

...