SQLite JDBCドライバにはバグがあるようですが、誰かが骨折したエラーを見つけられるかどうかは分かります。私は次のクエリを持っています: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=?
かなり簡単です。私はこれをSQLiteデータベースブラウザで実行して、?を置き換えることができます。 1で、18行が返されます。条件に一致するのは18行だけです。しかし、これをJavaで実行して値1を渡すと、817の値が返されます。それはデカルト結合ではありません。 SKU_ATTR_VALUEには864の可能な値があります。私が得た結果には、Productの各レコードに少なくとも1つの価値があるので、何が起こっているのか本当に想像することはできません。
私はこれをしばらく見てきました。私は完全に困惑しています。グーグルでは何も変えていないようだ。はい、私は、SQLiteブラウザと同じSQLiteデータベースに対してJavaクエリを実行していると確信しています。
SQLite jarの名前はsqlitejdbc-v056.jarです。これはSQLite 3.6.14.2に基づいています。ここで
は、クエリを設定するJavaコードです:
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();
私はしましたSKUとSKU_ATTR_VALUEテーブルを結合するときに問題があると判断しました。 SKUテーブルとPRODUCTテーブルがOKに参加します。また、NetBeansに組み込まれたデータベースブラウザにクエリをコピーすると、その問題もそこに現れました。そこで、私はON句を追加しようとしました。そして、WHERE句にs.SkuID = sav.SkuIDを追加します。これにより、NetBeans dbブラウザの問題は解決されましたが、NetBeansで実行されているコードには問題が解決されました。私はそうだと結論づけました、これはバグです、そして、私はSQLiteから離れています。私は今それを信じていない。 – dnuttle