[Gvsig_desarrolladores] Sentencia Select
Jose Manuel Vivó (Chema)
josemanuel.vivo en iver.es
Lun Mayo 21 08:31:11 CEST 2007
Hola Jaime:
Pues efectivamente, no esta soportado. Ten en cuenta que, el parser de SQL
que estás usando para esa sentencia está implementado dentro de la librería
GDBMS que usa gvSIG. No es un gestor de base de dados y no tiene en cuenta si
existe uno detrás de las fuentes.
Pues creo que el método de recorrer las tablas es lo único que te queda.
Pero para optimizarlo, igual podrías construirte un índice a mano sobre la
tabla B (o sobre la A, dependiendo los registros) y así solo necesitarías
recorrer tantas veces una tabla. Además, si esta busqueda se repite, igual te
conviene guardar ese índice en memoria y las busquedas resultarán bastante
rápidas.
Yo te sugeriría construir un HashMap cuya clave serían los campos por los
que comparas y el valor el índice del registro (si hay varios en vez de un
entero usa un ArrayList de enteros)
El Viernes 18 Mayo 2007 21:43, Jaime Traver escribió:
> Hola a todos:
>
> Tengo una duda acerca de la sentencia select, necesito saber si se puede
> realizar un CROSS JOIN de dos tablas, *A y *B. No se, si no está soportado
> o tengo mal creada la sentencia select, porque tengo un error de parseador
> SQL.
>
> FLayer layerTolocate = mapControl.getMapContext
> ().getLayers().getLayer(0);
> AlphanumericData capa = (AlphanumericData)layerTolocate;
> ProjectTable projectTable =
> getProjectTable((String)tableComboBox.getSelectedItem());
> SelectableDataSource sds_v,sds_t=null;
>
> //Obtenemos los índices de las filas
> DataSource ds;
>
> try {
> sds_v = capa.getRecordset();
> sds_t = projectTable.getModelo().getRecordset();
> String name_vista = sds_v.getName();
> String name_tabla = sds_t.getName();
> ds = LayerFactory.getDataSourceFactory().executeSQL("select *
> from " + name_vista +" cross join "+name_tabla+" where "+name_vista+".TIPO
> = "+name_tabla+".TVIAB and "+name_vista+".TEXT_1 = "+name_tabla+".NVIAB
> and "+name_vista+".TEXT = "+name_tabla+".NCALBN; " ,
> DataSourceFactory.MANUAL_OPENING);
> long[] selectedIndex = ds.getWhereFilter();
>
> for (int i=0 ; i<selectedIndex.length ; i++){
> System.out.print("\n FILA " + selectedIndex[i] + " ");
> for (int j=0 ; j<sds_v.getFieldCount() ; j++){
> System.out.print(sds_v.getFieldName(j));
> System.out.print(": ");
>
> System.out.print(sds_v.getFieldValue(selectedIndex[i],
> j));
> System.out.print(" ");
> }
> }
>
> He intentado tomar estas dos tablas (*A y *B) y recorrer por cada registro
> de *A todos los de *B, como intuia, es un proceso muy lento, querria
> saber en caso de que el croos join no estuviera soportado que otras
> opciones me quedarian.
>
> Un saludo a todos. Gracias
>
>
> *A = Tabla que forma parte del Tipo de documento Vista
> *B = Talba que forma parte de Tipo de documento Tabla
--
=============
Jose Manuel Vivó (Chema)
Equipo de gvSIG
IVER T.I. S.A.
C/ Salamanca, 50-52
46005-Valencia
Tlf.+34963163400
Spain
www.iver.es
www.gvsig.com
Más información sobre la lista de distribución gvSIG_desarrolladores