Несколько предложений where, чтение только одного - PullRequest
0 голосов
/ 30 мая 2019

Я должен получить информацию с несколькими предложениями where.Я могу сделать это только с помощью вложенного запроса.Я должен быть в состоянии извлечь информацию о 2 запросах shiftName по одной команде.Найдите имя и фамилию сотрудника, смены которого - «Классный вечер» и «Утренний блеск».

Пока что все, что я обнаружил, - это немного удачи с этим кодом, но проблема здесь в том, что он возвращает результаты «Утреннего утра».Блеск », но не« Классный вечер ».Как будто вложенный запрос даже не обрабатывается.Может кто-нибудь, пожалуйста, помогите.Я новичок в SQL, поэтому прошу прощения, если мой вопрос недостаточно ясен.

SELECT stfName, stlNname
FROM STAFF, STAFF_SHIFT_CENTER
WHERE STAFF.staffID=STAFF_SHIFT_CENTER.staffID
AND STAFF_SHIFT_CENTER.shiftName='Morning Shine'
AND (SELECT staffID FROM STAFF_SHIFT_CENTER
WHERE shiftName='Classy Evening');

Ответы [ 2 ]

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

Для этого можно использовать агрегирование.

SELECT s.stfName, s.stlNname
FROM STAFF s JOIN
     STAFF_SHIFT_CENTER ssc
     ON s.staffID = ssc.staffID
WHERE ssc.shiftName IN ('Morning Shine', 'Classy Evening')
GROUP BY s.stfName, s.stlNname
HAVING COUNT(DISTINCT ssc.shfitName) = 2;  -- each group has both shifts

Примечания:

  • Никогда не используйте запятые в предложении FROM.
  • Всегда используйте правильный, явный, стандартный JOIN синтаксис.
  • Псевдонимы таблиц облегчают написание и чтение запроса.
  • Уточните все имена столбцов, чтобы вы знали, из какой они таблицы.
0 голосов
/ 30 мая 2019

где - условие.

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

Вы не дали столбецсравните, чтобы он проигнорировал вашу вторую часть условия where.

В вашем случае вы хотите, чтобы значение staffID для 'Morning Shine' и 'Classy Evening' было равно.

, поэтому вам нужно выполнить:

SELECT stfName, stlNname
FROM STAFF, STAFF_SHIFT_CENTER
WHERE STAFF.staffID=STAFF_SHIFT_CENTER.staffID
AND STAFF_SHIFT_CENTER.shiftName='Morning Shine'
AND STAFF_SHIFT_CENTER.staffID IN (SELECT staffID FROM STAFF_SHIFT_CENTER
WHERE shiftName='Classy Evening');

Кроме того, я рекомендую вам использовать JOIN вместо CARTESIAN для улучшения вашего запроса.

Поэтому запрос будет:

SELECT stfName, stlNname
FROM STAFF s JOIN STAFF_SHIFT_CENTER ssc
     ON s.staffID=ssc.staffID
WHERE ssc.shiftName='Morning Shine'
AND ssc.staffID IN (SELECT staffID FROM STAFF_SHIFT_CENTER
WHERE shiftName='Classy Evening');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...