2011-10-01 10 views
5

He encontrado lo que parece ser un error en el controlador JDBC de SQLite, pero pensé que vería si alguien pudiera detectar algún error obsesivo de mi parte. Tengo la siguiente consulta:Unión interna SQLite/JDBC

SELECT 
    SKU_ATTR_VALUE.*, 
    Product.ProductID 
FROM 
    SKU_ATTR_VALUE 
    INNER JOIN SKU 
    ON SKU_ATTR_VALUE.SkuID=SKU.SkuID 
    INNER JOIN Product 
    ON SKU.ProductID=Product.ProductID 
WHERE Product.ProductID=? 

Bastante simple. Puedo ejecutar esto en el navegador de la base de datos SQLite, reemplazando el? con 1, y devuelve 18 filas, que es justo lo que debería hacer. Solo 18 filas coinciden con la condición. Pero cuando ejecuto esto en Java y paso el valor 1, recupero 817 valores. Y eso no es una unión cartesiana; hay 864 valores posibles en SKU_ATTR_VALUE. Los resultados que obtengo tienen al menos un valor para cada registro en Producto también ... así que realmente no puedo imaginar lo que está sucediendo.

He estado mirando esto un tiempo y estoy completamente perplejo. Google no parece activar nada. Sí, estoy seguro de que estoy ejecutando la consulta Java en la misma base de datos SQLite que en el navegador SQLite.

El nombre del jar SQLite es sqlitejdbc-v056.jar. Está basado en SQLite 3.6.14.2.

Este es el código Java que establece la consulta:

String sql = "SELECT SKU_ATTR_VALUE.*, Product.ProductID " + 
      "FROM SKU_ATTR_VALUE " + 
      "  INNER JOIN SKU ON SKU_ATTR_VALUE.SkuID=SKU.SkuID " + 
      "  INNER JOIN Product ON SKU.ProductID=Product.ProductID " + 
      "WHERE Product.ProductID=?"; 
ps = conn.prepareStatement(sql); 
ps.setInt(1, productID); 
ResultSet rs = ps.executeQuery(); 
+0

tengo promovido determinó que el problema es cuando me uno a las tablas SKU y SKU_ATTR_VALUE. Las tablas SKU y PRODUCT se unen a OK. También vi que, cuando copiaba la consulta en el navegador de base de datos integrado en NetBeans, el problema aparecía allí también. Entonces intenté agregar una cláusula ON, y agregaría s.SkuID = sav.SkuID en la cláusula WHERE. Esto solucionó el problema en el navegador db NetBeans, pero no en el código (que se ejecuta en NetBeans). Llegué a la conclusión de que sí, esto es un error, y me estoy alejando de SQLite. No confío en eso ahora. – dnuttle

Respuesta

0

Según this document sección "5.0 Combinaciones": se puede tratar de reescribir su consulta como esta:

SELECT 
    SKU_ATTR_VALUE.*, 
    Product.ProductID 
FROM 
    Product, SKU, SKU_ATTR_VALUE 
WHERE 
Product.ProductID=? 
AND SKU.ProductID=Product.ProductID 
AND SKU_ATTR_VALUE.SkuID=SKU.SkuID 
Cuestiones relacionadas