tutorial powerapps español ejemplos donweb datos conectar sql sql-server sql-server-2005

sql - español - powerapps ejemplos



El identificador de varias partes no se puede vincular (13)

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 enlazar. ¿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;


¿Olvidaste unir algunas tablas? Si no, entonces probablemente necesite usar algunos alias.


Algunas veces este error ocurre cuando usa su esquema (dbo) en su consulta de una manera incorrecta.

por ejemplo, si escribes:

select dbo.prd.name from dbo.product prd

obtendrás el error.

En estas situaciones, cámbialo a:

select prd.name from dbo.product prd


En cambio, puedes intentar unir mesas como,

select .... from dkcd right join a , b

Esto debería funcionar


En mi caso, el problema resultó ser el nombre de alias que le había dado a la mesa. "oa" parece no ser aceptable para SQL Server.


Está mezclando combinaciones implícitas con combinaciones explícitas. Eso está permitido, pero debe ser consciente de cómo hacerlo correctamente.

El hecho es que las combinaciones explícitas (las que se implementan usando la palabra clave JOIN ) tienen prioridad sobre las implícitas (las uniones ''coma'', donde la condición de unión se especifica en la cláusula WHERE ).

Aquí hay un resumen de su consulta:

SELECT … FROM a, b LEFT JOIN dkcd ON … WHERE …

Probablemente esperas que se comporte así:

SELECT … FROM (a, b) LEFT JOIN dkcd ON … WHERE …

es decir, la combinación de las tablas a y b se une a la tabla dkcd . De hecho, lo que está sucediendo es

SELECT … FROM a, (b LEFT JOIN dkcd ON …) WHERE …

es decir, como ya habrá comprendido, dkcd se une específicamente contra b solo b , luego el resultado de la combinación se combina con a y se filtra más con la cláusula WHERE . En este caso, cualquier referencia a a en la cláusula ON es inválida, a se desconoce en ese punto. Es por eso que recibes el mensaje de error.

Si yo fuera usted, probablemente intente reescribir esta consulta, y una posible solución podría ser:

SELECT DISTINCT a.maxa, b.mahuyen, a.tenxa, b.tenhuyen, ISNULL(dkcd.tong, 0) AS tongdkcd FROM phuongxa a INNER JOIN quanhuyen b ON LEFT(a.maxa, 2) = b.mahuyen 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'' ORDER BY a.maxa

Aquí las tablas a y b se unen primero, luego el resultado se une a dkcd . Básicamente, esta es la misma consulta que la suya, solo que usa una sintaxis diferente para una de las combinaciones, lo que hace una gran diferencia: la referencia a.maxa en la dkcd de unión de dkcd ahora es absolutamente válida.

Como @Aaron Bertrand ha señalado correctamente, probablemente debería calificar a maxa con un alias específico, probablemente a , en la cláusula ORDER BY .


Estaba luchando con el mismo mensaje de error en SQL Server, ya que tenía varias combinaciones, cambiando el orden de las uniones lo resolvió para mí.


Estaba teniendo el mismo error de JDBC. Comprobé todo y mi consulta estuvo bien. Resultó, en donde cláusula tengo una discusión:

where s.some_column = ?

Y el valor del argumento que estaba pasando 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 está en mi caso. Solo pensé que alguien podría enfrentar el mismo problema


Mi error fue usar un campo que no existía en la tabla.

table1.field1 => no existe

table2.field1 => es correcto

Corrija su nombre de tabla.

mi error ocurrió por usar CON

WITH RCTE AS ( SELECT... ) SELECT RCTE.Name, ... FROM RCTE INNER JOIN Customer ON RCTE.CustomerID = Customer.ID

cuando se utiliza en unirse a otras tablas ...


Si este error ocurre en una UPDATE , vuelva a verificar JOIN en la tabla con la columna / campo que está causando el error.

En mi caso esto se debió a la falta de JOIN , que generó el mismo error debido a un campo desconocido (como señaló Andriy ).


Si ninguno de los anteriores está funcionando, intente copiar los resultados conocidos que cumplan con uno de los criterios de búsqueda a una tabla temporal, y luego hacer la combinación en eso.


Soy nuevo en SQL, pero me encontré con este problema en un curso que estaba tomando y descubrí que la asignación de la consulta al proyecto ayudó específicamente a eliminar el error de varias partes. Por ejemplo, el proyecto que creé era CTU SQL Project, así que me aseguré de iniciar mi script con USE [CTU SQL Project] como mi primera línea, como a continuación.

USE [CTU SQL Project] SELECT Advisors.First_Name, Advisors.Last_Name...and so on.


si has dado un nombre cambia eso a nombre real

por ejemplo

SELECT A.name,A.date FROM [LoginInfo].[dbo].[TableA] as A join [LoginInfo].[dbo].[TableA] as B on [LoginInfo].[dbo].[TableA].name=[LoginInfo].[dbo].[TableB].name;

cambiar eso a

SELECT A.name,A.date FROM [LoginInfo].[dbo].[TableA] as A join [LoginInfo].[dbo].[TableA] as B on A.name=B.name;


SELECT DISTINCT phuongxa.maxa , quanhuyen.mahuyen , phuongxa.tenxa , quanhuyen.tenhuyen , ISNULL(dkcd.tong, 0) AS tongdkcd FROM phuongxa , quanhuyen LEFT OUTER JOIN ( SELECT khaosat.maxa , COUNT(*) AS tong FROM khaosat WHERE CONVERT(DATETIME, ngaylap, 103) BETWEEN ''Sep 1 2011'' AND ''Sep 5 2011'' GROUP BY khaosat.maxa ) AS dkcd ON dkcd.maxa = maxa WHERE phuongxa.maxa <> ''99'' AND LEFT(phuongxa.maxa, 2) = quanhuyen.mahuyen ORDER BY maxa;