我在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中的每条记录至少有一个值...所以我真的无法想象发生了什么。
我一直在看这个,我完全被难过了。谷歌搜索似乎没有任何改变。是的,我确信我正在使用与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();
答案 0 :(得分:0)
根据this document部分“5.0联接”:您可以尝试重写您的查询:
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