Я пишу запрос, чтобы получить контактные данные, основываясь на том, является ли кто-то «высоким донором» или «низким донором», и мой запрос работает отлично, за исключением того, что он будет включать кого-то и как высокого донора, и низкого донора, если они мы находимся в обеих категориях, когда мы действительно хотим просто включить их в качестве highDonor.
(Например: Джей Смит пожертвовал 1000 долларов в июне и 50 долларов в июле. Джей будет указан как highDonor и lowDonor.)
Чтобы исправить эту проблему, я пытаюсь исключить контакты из списка lowDonors, если они уже были признаны как highDonors. Мой исходный запрос объединил эти подзапросы, но когда я пытаюсь присвоить псевдонимы отдельным подзапросам и ссылаться на highDonors во втором подзапросе, я получаю ошибку.
(Примечание: это укороченная версия полного запроса, которая фокусируется на фрагментах, вызывающих ошибку.)
Это ошибка, которую я получаю: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'highDonors.contactId) as lowDonors ) as highAndLowDonors ' at line 23
SELECT DISTINCT
...
FROM
((
SELECT DISTINCT contactid,
"highDonor" AS highorlowdonor
FROM donation
WHERE donationdate > "2015-07-03"
AND donationamount BETWEEN 100 AND 9999.99)
AS highdonors
UNION ALL
(
SELECT DISTINCT contactid,
"lowDonor" AS highorlowdonor
FROM donation
WHERE donationdate > "2015-07-03"
AND donationamount BETWEEN 1 AND 99.99
WHERE contactid NOT IN highdonors.contactid)
AS lowdonors )
AS highandlowdonors
...
Есть мысли о том, что здесь вызывает ошибку? Могу ли я создать псевдоним для двух подзапросов, подобных этому, и использовать первый внутри второго?