He visto errores similares en SO, pero no encuentro una solución para mi problema. Tengo una consulta SQL como:
SELECT DISTINCT
a.maxa ,
b.mahuyen ,
a.tenxa ,
b.tenhuyen ,
ISNULL(dkcd.tong, 0) AS tongdkcd
FROM phuongxa a ,
quanhuyen b
LEFT OUTER JOIN ( SELECT maxa ,
COUNT(*) AS tong
FROM khaosat
WHERE CONVERT(DATETIME, ngaylap, 103) BETWEEN 'Sep 1 2011'
AND
'Sep 5 2011'
GROUP BY maxa
) AS dkcd ON dkcd.maxa = a.maxa
WHERE a.maxa <> '99'
AND LEFT(a.maxa, 2) = b.mahuyen
ORDER BY maxa;
Cuando ejecuto esta consulta, el resultado del error es:
El identificador de varias partes "a.maxa" no se pudo vincular. ¿Por qué?
P / s: si divido la consulta en 2 consultas individuales, se ejecuta bien.
SELECT DISTINCT
a.maxa ,
b.mahuyen ,
a.tenxa ,
b.tenhuyen
FROM phuongxa a ,
quanhuyen b
WHERE a.maxa <> '99'
AND LEFT(a.maxa, 2) = b.mahuyen
ORDER BY maxa;
y
SELECT maxa ,
COUNT(*) AS tong
FROM khaosat
WHERE CONVERT(DATETIME, ngaylap, 103) BETWEEN 'Sep 1 2011'
AND 'Sep 5 2011'
GROUP BY maxa;
sql
sql-server
sql-server-2005
PhamMinh
fuente
fuente
phuongxa
tabla incluye una columnamaxa
?Respuestas:
Está mezclando combinaciones implícitas con combinaciones explícitas. Eso está permitido, pero debe ser consciente de cómo hacerlo correctamente.
La cuestión es que las uniones explícitas (las que se implementan usando la
JOIN
palabra clave) tienen prioridad sobre las implícitas (las uniones de 'coma', donde la condición de unión se especifica en laWHERE
cláusula).Aquí hay un resumen de su consulta:
Probablemente espere que se comporte así:
es decir, la combinación de tablas
a
yb
se une con la tabladkcd
. De hecho, lo que está sucediendo eses decir, como ya habrá entendido,
dkcd
se une específicamente contrab
y solob
, luego el resultado de la combinación se combinaa
y se filtra más con laWHERE
cláusula. En este caso, cualquier referencia aa
en laON
cláusula es inválida,a
es desconocida en ese punto. Es por eso que recibe el mensaje de error.Si yo fuera usted, probablemente intentaría reescribir esta consulta, y una posible solución podría ser:
Aquí las tablas
a
yb
se unen primero, luego el resultado se une adkcd
. Básicamente, esta es la misma consulta que la suya, solo que usa una sintaxis diferente para una de las uniones, lo que hace una gran diferencia: la referenciaa.maxa
en ladkcd
condición de unión ahora es absolutamente válida.Como @Aaron Bertrand ha notado correctamente, probablemente debería calificar
maxa
con un alias específico, probablementea
, en laORDER BY
cláusula.fuente
ORDER BY maxa
, gracias. En cuanto a las fechas, creo que así es como el OP ha elegido especificarlas en su entorno.A veces, este error ocurre cuando usa su esquema (dbo) en su consulta de manera incorrecta.
por ejemplo si escribes:
Obtendrás el error.
En estas situaciones cámbielo a:
fuente
si le ha dado un nombre alies, cámbielo a nombre real
por ejemplo
cambiar eso a
fuente
Estaba luchando con el mismo mensaje de error en SQL SERVER, ya que tenía varias combinaciones, cambiar el orden de las combinaciones lo resolvió para mí.
fuente
En mi caso, el problema resultó ser el nombre de alias que le había dado a la tabla. "oa" parece no ser aceptable para SQL Server.
fuente
Estaba teniendo el mismo error de JDBC. Revisé todo y mi consulta estuvo bien. Resultó, en donde cláusula tengo un argumento:
Y el valor del argumento que estaba transmitiendo era nulo. Esto también da el mismo error que es engañoso porque cuando buscas en Internet terminas diciendo que algo anda mal con la estructura de la consulta, pero no es mi caso. Solo pensé que alguien podría enfrentar el mismo problema
fuente
Lo que funcionó para mí fue cambiar mi cláusula WHERE en una subconsulta SELECT
DE:
A:
fuente
Soy nuevo en SQL, pero me encontré con este problema en un curso que estaba tomando y descubrí que asignar la consulta al proyecto específicamente ayudó a eliminar el error de varias partes. Por ejemplo, el proyecto que creé fue CTU SQL Project, así que me aseguré de comenzar mi script con USE [CTU SQL Project] como mi primera línea como se muestra a continuación.
fuente
Si este error ocurre en un
UPDATE
, verifique dos vecesJOIN
en la tabla con la columna / campo que está causando el error.En mi caso, esto se debió a la falta de
JOIN
sí mismo, que generó el mismo error debido a un campo desconocido (como señaló Andriy ).fuente
En su lugar, puede intentar unir tablas como,
Esto debería funcionar
fuente
fuente
Mi error fue utilizar un campo que no existía en la tabla.
table1.field1 => no existe
table2.field1 => es correcto
Corrija el nombre de su tabla.
mi error ocurrió por usar WITH
cuando se usa en combinación con otras tablas ...
fuente
¿Olvidaste unirte a algunas mesas? Si no, entonces probablemente necesites usar algunos alias.
fuente
También estaba luchando con este error y terminé con la misma estrategia que la respuesta. Incluyo mi respuesta solo para confirmar que esta es una estrategia que debería funcionar.
Aquí hay un ejemplo en el que primero hago una unión interna entre dos tablas que sé que obtuvieron datos y luego dos uniones externas izquierdas en las tablas que pueden tener filas correspondientes que pueden estar vacías. Combina combinaciones internas y combinaciones externas para obtener resultados con datos entre tablas en lugar de hacer la sintaxis separada por comas predeterminada entre tablas y omitir filas en la combinación deseada.
Primero: realice las uniones internas entre las tablas que espera que coincidan con los datos. Segunda parte: continúe con las uniones externas para intentar recuperar datos en otras tablas, pero esto no filtrará su conjunto de resultados si la unión externa de la tabla no tiene los datos correspondientes o coincide con la condición que configuró en el predicado / condición.
fuente
Este error también puede ser causado simplemente por faltar una coma
,
entre los nombres de columna en la instrucción SELECT.p.ej:
fuente