SQL table.столбец не работает, когда я использую его с полным соединением

#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 
 

Если вы столкнулись с проблемами производительности при полном объединении, рассмотрите:

  1. тебе действительно это нужно?
  2. Предложение Матбайли объединить только те строки, в которых отсутствует левое соединение: (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. Работает на меня. Советы включены, спасибо, Мэт