Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   ASP Clásico (http://www.forosdelweb.com/f15/)
-   -   Inner Join o ANSI? (http://www.forosdelweb.com/f15/inner-join-ansi-573438/)

i_e_s27 07/04/2008 12:21

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! :adios:

u_goldman 07/04/2008 12:31

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

i_e_s27 07/04/2008 13:06

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!

u_goldman 07/04/2008 13:10

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

i_e_s27 07/04/2008 13:20

Re: Inner Join o ANSI?
 
:aplauso: Gracias!!! Ahi andubo! :-)

i_e_s27 07/04/2008 13:27

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?

u_goldman 07/04/2008 13:31

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

i_e_s27 07/04/2008 13:47

Re: Inner Join o ANSI?
 
Un alias? jaja, que bueno, jamas se me hubiese ocurrido.

Muchisimas gracias otra vez! :-)


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

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.