В настоящее время я работаю над опросник стиле веб-сайт, где кто-то может создать анкету, а затем либо ответить на него, как человек, который создал его или пригласить людей на него ответить.MySQL Left присоединяется непредвиденного вывода
В настоящее время у меня возникают проблемы при попытке использовать соединения.
- Когда кто-то отвечает в качестве администратора, но они не пригласили в свою questionniare я получаю ошибки показано ниже.
- Когда кто-то не отвечает как администратор, но я пытаюсь запустить запрос, я, похоже, получаю тот же ответ.
tl; dr: Я пытаюсь вернуть две строки с информацией. Как questionniare администратора, который не приглашен на опросника
SELECT cat.catID, cat.catName, cat.catPerms, cat.projectNumber, CASE WHEN cat.catID IS NOT NULL AND count(ANS.itemID) = 0 THEN "Awaiting Response" WHEN count(ANS.itemID) > 0 THEN "Responded" END AS "status" FROM categories AS cat INNER JOIN invited AS invtee ON cat.catID = invtee.catID INNER JOIN answers AS ANS ON cat.catID = ANS.catID WHERE invtee.invEmail = "[email protected]" UNION ALL SELECT cat.catID, cat.catName, cat.catPerms, cat.projectNumber, CASE WHEN count(ANS.itemID) = 0 THEN "Awaiting Response" WHEN count(ANS.itemID) > 0 THEN "Responded" END AS "status" FROM categories AS cat LEFT OUTER JOIN answers AS ANS ON cat.catID = ANS.catID AND ANS.userEmail = "[email protected]" WHERE cat.adminEmail = "[email protected]";
Таблицы, которые имеют отношение к запросу ...
categories
:
| catID | catName | adminName | adminEmail | catDate | catPerms | projectNumber | +-------+---------+-----------+------------+---------+----------+---------------+ | 1 | Stack | Stack ... | [email protected] | ... | 0 | ... | | 2 | Over | Stack ... | [email protected] | ... | 0 | ... |
invited
(имел в виду должно быть пустым):
| invID | catID | invName | invEmail | +-------+-------+---------+----------+ | | | | |
answers
:
| answerID | catID | itemID | choiceID | userName | userEmail | answerText | answerStatus | +----------+-------+--------+----------+----------+-----------+------------+--------------+ | 1 | 1 | 1 | 2 | Stack... | [email protected] | ... | 1 |
Выход:
| catID | catName | catPerms | projectNumber | Status | +-------+---------+----------+---------------+-----------+ | 1 | Over | 0 | ... | Responded | | NULL | NULL | NULL | NULL | NULL |
Что бы быть лучшим способом решить эту проблему?
Редактировать: Внутри этого утверждения кажется, что left outer join
игнорируется.
SELECT cat.catID, cat.catName, cat.catPerms, cat.projectNumber, CASE WHEN count(ANS.itemID) = 0 THEN "Awaiting Response" WHEN count(ANS.itemID) > 0 THEN "Responded" END AS "status" FROM categories AS cat LEFT OUTER JOIN answers AS ANS ON cat.catID = ANS.catID AND ANS.userEmail = "[email protected]" WHERE cat.adminEmail = "[email protected]";
вы имеете в виду, чтобы избежать строки с NULL значениями? – Regenschein
@Regenschein, я даже не знаю, на данный момент - я только что был взломан на этот сайт с помощью этого случайного запроса, пытающегося вернуть две строки, даже если администратор не приглашен или не ответил. – Comms