Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Misturando ANSI 1992 JOINs e COMMAs em uma consulta


De acordo com este link , você não deve misturar as duas notações ao criar junções. A vírgula que você está usando para juntar memebers as m, telephone as t e as chamadas subsequentes para inner join , estão acionando o erro de coluna desconhecido.

Para lidar com isso, use CROSS/INNER/LEFT JOIN em vez de vírgulas.

Anteriormente, o operador de vírgula (,) e JOIN tinham a mesma precedência, então a expressão de junção t1, t2 JOIN t3 era interpretada como((t1, t2) JOIN t3). Agora JOIN tem maior precedência, então a expressão é interpretada como (t1, (t2 JOIN t3)). Essa alteração afeta as instruções que usam uma cláusula ON, pois essa cláusula pode se referir apenas a colunas nos operandos da junção, e a alteração na precedência altera a interpretação de quais são esses operandos.

Para fins pedagógicos, estou adicionando a consulta, pois acho que deveria ser:
SELECT m.*, t.*
FROM memebers as m 
    JOIN telephone as t
    JOIN memeberFunctions as mf ON m.id = mf.memeber AND mf.function = 32
    JOIN mitgliedTelephone as mt ON m.id = mt.memeber

Como você não está participando de t e m , o resultado final será um produto cartesiano; você pode querer que ele seja revisto.

Espero ter ajudado.