logo
  • 主页
  • 文档
  • 示例
  • 简单left join实现

    JCalculator本身并没有提供left join这个接口,我实践中绝大多数都是在数据库就完成这步了。但数据库也有可能存在一个库是oracel,一个是mysql的情况,两个库同时用。一份数据从oracle出来,一份数据从mysql出来,无法关联。所有还是有必要给出一个这样的demo。

                
                  // 商店ID关联数据
                  var left = [
                    { id: 1, name: "apple", price: 5, shopID: 2 },
                    { id: 2, name: "banana", price: 3, shopID: 3 }
                  ];
    
                  var right = [
                    { id: 1, name: "othersShop", tel: "1317866765" },
                    { id: 2, name: "appleShop", tel: "1246531231" },
                    { id: 3, name: "bananaShop", tel: "124512551" }
                  ];
    
                  //转成对象,类似数据库根据ID建立索引的功能,理解数据逻辑和性能上这都更好
                  var rightIndex = {};
    
                  jc.map(right, function (row) {
                    rightIndex[row.id] = row
                  })
                  console.log(rightIndex)
                  /* output: {
                     "1":{"id":1,"name":"othersShop","tel":"1317866765"},
                     "2":{"id":2,"name":"appleShop","tel":"1246531231"},
                     "3":{"id":3,"name":"bananaShop","tel":"124512551"}
                    }*/
                  
                  var leftJoin = jc.sql({
                    select: {
                      col: {
                        name: "name",
                        price: function (row) {
                          return row.price + "$";
                        },
                        shopName: function (row) {
                          var rightRow = rightIndex[row.shopID];
                          return rightRow.name;
                        },
                        tel: function (row) {
                          var rightRow = rightIndex[row.shopID];
                          return rightRow.tel;
                        }
                      }
                    },
                    from: left
                  });
                  console.log(leftJoin);
                  /* output: [
                    {"name":"apple","price":"5$","shopName":"appleShop","tel":"1246531231"},
                    {"name":"banana","price":"3$","shopName":"bananaShop","tel":"124512551"}
                  ]*/