Вот краткое описание того, что я пытаюсь выполнить; мой запрос приведен ниже.Коррелированный подзапрос в операторе CASE MySQL
Есть 4 таблицы и 1 вид, которые имеют отношение к этому конкретному запросу (извините имена выглядят неаккуратно, но они следуют строгой конвенции, которая будет иметь смысл, если вы увидели полный список):
Performance
s может имеют много Performer
s, и эти ассоциации хранятся в PPerformer
. Fan
s может иметь избранное, которое хранится в Favorite_Performer
. В обзоре _UpcomingPerformances
содержится вся информация, необходимая для отображения удобного списка предстоящих выступлений.
Моя цель состоит в том, чтобы выбрать все данные из _UpcomingPerformance, затем включить еще один столбец, который указывает, имеет ли данный Performance Performer, который Fan добавил в качестве своего любимого. Это включает в себя выбор списка исполнителей, связанных с производительностью, а также список исполнителей, которые находятся в Favorite_Performer для этого вентилятора, и пересечение двух массивов, чтобы определить, что-то общее.
При выполнении нижеследующего запроса я получаю сообщение об ошибке #1054 - Unknown column 'up.pID' in 'where clause'
. Я подозреваю, что это как-то связано с неправильным использованием Correlated Subqueries, но насколько я могу судить, что я делаю, это должно работать. Он работает, когда я заменяю up.pID
(в предложении WHERE t2
) с жестко запрограммированным номером, и да, pID - это существующий столбец _UpcomingPerformance.
Спасибо за любую помощь, которую вы можете предоставить.
SELECT
up.*,
CASE
WHEN EXISTS (
SELECT * FROM (
SELECT RID FROM Favorite_Performer
WHERE FanID = 107
) t1
INNER JOIN
(
SELECT r.ID as RID
FROM PPerformer pr
JOIN Performer r ON r.ID = pr.Performer_ID
WHERE pr.Performance_ID = up.pID
) t2
ON t1.RID = t2.RID
)
THEN "yes"
ELSE "no"
END as pText
FROM
_UpcomingPerformances up
Работает как очарование. Спасибо! –