加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQLite / JDBC内连接

发布时间:2020-12-12 19:00:19 所属栏目:百科 来源:网络整理
导读:我发现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.Prod
我发现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();

解决方法

根据 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读