Foros del Web » Programando para Internet » ASP Clásico »

Inner Join o ANSI?

Estas en el tema de Inner Join o ANSI? en el foro de ASP Clásico en Foros del Web. Hola, queria saber que opcion es mejor a la hora de hacer una consulta a mi base de datos en Access: Con Inner Join: SELECT ...
  #1 (permalink)  
Antiguo 07/04/2008, 12:21
Avatar de i_e_s27  
Fecha de Ingreso: marzo-2008
Ubicación: En mi casa
Mensajes: 208
Antigüedad: 17 años, 1 mes
Puntos: 5
Inner Join o ANSI?

Hola, queria saber que opcion es mejor a la hora de hacer una consulta a mi base de datos en Access:

Con Inner Join:

SELECT Facturas.*, Albaranes.* FROM Facturas INNER JOIN Albaranes ON Facturas.IdAlbaran = Albaranes.IdAlbaran WHERE Facturas.IdCliente = 325

...o en formato ANSI:

SELECT Facturas.*, Albaranes.* FROM Facturas, Albaranes WHERE Facturas.IdAlbaran = Albaranes.IdAlbaran AND Facturas.IdCliente = 325

Por ahi he leido que Oracle no soporta Inner Join, y que es un mal uso del SQL. Lo que quiero saber es cual es mas versatil si algun dia tengo que migrar de base de datos.

Muchas Gracias!
  #2 (permalink)  
Antiguo 07/04/2008, 12:31
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Re: Inner Join o ANSI?

Hola i_e_s27, que yo sepa INNER JOIN es ANSI, y de hecho tanto el JOIN implícito como el explícito es ANSI (auque puedo estar equivocado). Hablando de un JOIN externo, entonces para que sea ANSI deberías utilizar el modificador OUTER, pero para el interno, sirve indistintamente.


Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 07/04/2008, 13:06
Avatar de i_e_s27  
Fecha de Ingreso: marzo-2008
Ubicación: En mi casa
Mensajes: 208
Antigüedad: 17 años, 1 mes
Puntos: 5
Re: Inner Join o ANSI?

Ahh, gracias por sacarme la duda

Ahora tengo el problema de que quise implementar esto, y me tira este error:

Tipo de error:
ADODB.Recordset (0x800A0CC1)
No se encontró el elemento en la colección que corresponde con el nombre o el ordinal pedido.

En la linea marcada en rojo:

Código:
	If Request.form("subcategoria") = "" Then
		Response.Write("Se encontro un error al recoger datos del formulario")
		Exit Sub
	End If
	Dim rsProductos
	Dim strSQL_Productos
	Set rsProductos = Server.CreateObject("ADODB.Recordset")
	
	strSQL_Productos = "SELECT tblproductos.id, tblproductos.nombre, tblproductos.categoria_asociada, tblproductos.subcategoria_asociada, tblcategorias.nombre_categoria, tblsubcategorias.nombre_subcategoria FROM tblproductos, tblcategorias, tblsubcategorias WHERE tblproductos.categoria_asociada = tblcategorias.id AND tblproductos.subcategoria_asociada = tblsubcategorias.id AND tblproductos.subcategoria_asociada = " & Request.form("subcategoria")
	
	rsProductos.Open strSQL_Productos, adoCon, adOpenStatic, adLockReadOnly
	
	If rsProductos.RecordCount > 0 Then
%>
  <tr>
    <td bgcolor="#FFFFFF"><p>&nbsp;</p>
    <table width="95%" border="0" align="center" cellpadding="0" cellspacing="0">
      <tr>
        <td width="3%"><img src="images/flechita.gif" alt="&gt;" width="10" height="10" /></td>
        <td width="97%"><p>Imposible eliminar la Subcategoria &quot;<%Response.Write(rsProductos("tblsubcategorias.nombre_subcategoria"))%>&quot;</p>
          <p>Todavia  tiene productos asociados a ella, primero modifique dichos productos:</p>
          <table width="100%" border="1" align="center" cellpadding="0" cellspacing="0">
            <tr>
              <td width="13%"><div align="center">ID</div></td>
              <td width="35%"><div align="center">Nombre</div></td>
              <td width="26%"><div align="center">Categoria</div></td>
              <td width="26%"><div align="center">Subcategoria</div></td>
            </tr>
<%
		Dim i
		For i=1 to rsProductos.RecordCount
%>
            <tr>
              <td><%Response.Write(rsProductos("tblproductos.id"))%></td>
              <td><%Response.Write(rsProductos("tblproductos.nombre"))%></td>
              <td><%Response.Write(rsProductos("tblcategorias.nombre_categoria"))%></td>
              <td><%Response.Write(rsProductos("tblsubcategorias.nombre_subcategoria"))%></td>
            </tr>
<%
			rsProductos.MoveNext
		Next 'i
%>
          </table>          
          <p>&nbsp;</p></td>
      </tr>
    </table>
    </td>
  </tr>
Que puede ser? mi construccion SQL esta bien?

Yo tengo 3 tablas:

Una que tiene los productos, con su id, nombre, la categoria a la que pertenecen (en ID), y la subcategoria a la que pertenecen (en ID)

Una donde tengo las categorias que tiene: Id de la categoria, Nombre

Y la ultima donde estan las subcategorias tiene: Id de la subcategoria, nombre, Id de la categoria a la que pertenece.

La relacion que deseo establecer esta marcada con colores.

Gracias por la ayuda!
  #4 (permalink)  
Antiguo 07/04/2008, 13:10
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Re: Inner Join o ANSI?

Hola de nuevo, el error es que a tu recordset no le interesa de donde viene el dato, es decir, tabla.campo no es correcto, con el nombre del campo basta:

rsProductos("nombre_subcategoria")

Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #5 (permalink)  
Antiguo 07/04/2008, 13:20
Avatar de i_e_s27  
Fecha de Ingreso: marzo-2008
Ubicación: En mi casa
Mensajes: 208
Antigüedad: 17 años, 1 mes
Puntos: 5
Re: Inner Join o ANSI?

Gracias!!! Ahi andubo!
  #6 (permalink)  
Antiguo 07/04/2008, 13:27
Avatar de i_e_s27  
Fecha de Ingreso: marzo-2008
Ubicación: En mi casa
Mensajes: 208
Antigüedad: 17 años, 1 mes
Puntos: 5
Re: Inner Join o ANSI?

Aunque ahora me surgio una duda hipotetica...

Que pasaria si yo tengo 2 tablas, y en las dos tengo un campo que se llama id, como hago para mostrar el id de una u otra respectivamente?
  #7 (permalink)  
Antiguo 07/04/2008, 13:31
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Re: Inner Join o ANSI?

Utilizas un alias:

Código:
SELECT tabla1.campo1, tabla2.campo1 as otrocampo FROM tabla1 INNER JOIN tabla2 ON tabla1.id = tabla2.id 

<%=rs("campo1")%><br/>
<%=rs("otrocampo")%><br/>
Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #8 (permalink)  
Antiguo 07/04/2008, 13:47
Avatar de i_e_s27  
Fecha de Ingreso: marzo-2008
Ubicación: En mi casa
Mensajes: 208
Antigüedad: 17 años, 1 mes
Puntos: 5
Re: Inner Join o ANSI?

Un alias? jaja, que bueno, jamas se me hubiese ocurrido.

Muchisimas gracias otra vez!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:41.