#mysql #sql
Вопрос:
У меня есть этот SQL-запрос:
SELECT main.cname, main.email, das.a
FROM main
FULL JOIN das ON main.email = das.cname
И это возвращает ошибку :
«неизвестный столбец main.cname в списке файлов».
в то время как колонка, безусловно, существует:
SELECT main.cname
FROM main
кажется, все в порядке.
Я пробовал использовать псевдонимы, но от этого становилось только хуже. Я ничего не понимаю
Комментарии:
1. Пожалуйста, запустите описание в двух таблицах и включите результаты в свой вопрос.
2. почему вы используете полное соединение? Просто попробуйте использовать ПРИСОЕДИНИТЬСЯ к das НА main.email = das.cname
3. ПОЛНОЕ СОЕДИНЕНИЕ не является чем-то в MySQL, поэтому это анализируется как
SELECT main.cname, main.email, das.a FROM main AS full JOIN das ON main.email = das.cname
4. @coyeb60297 огромное количество часов, которые я потратил на попытки… проблема решена, спасибо.
Ответ №1:
Как указал coyeb60297, MySQL не выполняет полных внешних соединений, поэтому ваш запрос:
SELECT main.cname, main.email, das.a
FROM
main full
JOIN das ON main.email = das.cname
и потому main
что был назван как full
, вы не можете сказать main.cname
, потому main
что это не вещь
Это сработало бы:
SELECT full.cname, full.email, das.a
FROM
main full
JOIN das ON full.email = das.cname
.. но это не полное соединение (это просто лучше объясняет пункт выше).
Вместо этого подумайте о чем-то вроде:
SELECT main.cname, main.email, das.a
FROM
main
LEFT JOIN das ON main.email = das.cname
UNION
SELECT main.cname, das.email, das.a
FROM
main
RIGHT JOIN das ON main.email = das.cname
Если вы столкнулись с проблемами производительности при полном объединении, рассмотрите:
- тебе действительно это нужно?
- Предложение Матбайли объединить только те строки, в которых отсутствует левое соединение:
(a LEFT JOIN b) UNION ALL (a RIGHT JOIN b WHERE a.id IS NULL)
Комментарии:
1.
(a LEFT JOIN b) UNION (a RIGHT JOIN b)
может быть особенно медленным из-за устранения дубликатов? Не(a LEFT JOIN b) UNION ALL (a RIGHT JOIN b WHERE a.id IS NULL)
будет ли это значительно быстрее?2. Работает на меня. Советы включены, спасибо, Мэт