【问题标题】:How to get two table's data in one?如何将两个表的数据合二为一?
【发布时间】:2019-04-12 06:32:36
【问题描述】:

我的数据库中有两个表,一个是Syncbill,另一个是Syncbill 中的Paymentmode。我有几列代表支付类型,例如现金、Paytm 等是Otherpayment1OtherPayment2 等等。

我的数据库中还有一个名为 paymentmode 的表,其中定义了其他支付模式名称,例如 OtherPayment1 在那里定义为 swiggy。

表同步账单

餐桌支付方式

结果表/输出

我想知道是否是通过查询完成的

我面临的问题是:

  • 这两个表之间没有关系
  • 我建立的关系在Paymentmode表中有四列命名为PositionPaymentcodePaymentnameIsActive,其中位置定义为1、2、3、4等, 所以这些 1,2,3... 和其他表中的 Otherpayment1,Otherpayment2.. 这里 1,2,3 是定义付款方式
  • 现在我要做的是从两个表中获取数据,但作为 Otherpayment1 的位置,我想要位置 1 的其他表 (Paymentmode) 中的内容

  • 如表 Paymentmode 我有一个列 IsActive 所以我只想得到那些 PaymentNamesIsActive='Y'

  • 我不知道该怎么做使用 Java-Servlets 作为服务器端语言

我之前在做什么:

我正在写这个查询:

    SELECT billdate,SUM(paytm) paytm,SUM(cash) cash,
    SUM(otherpayment1) Swiggy, SUM(otherpayment2) KB,SUM(otherpayment3) BigBasket,SUM(otherpayment4) 
    Zomato FROM syncbill WHERE a.BILLDATE BETWEEN '2018-08-05' AND '25018-08-10'

我的 Java servlet 我正在使用 resultset.getstring 从数据库中获取值,然后将它们存储到 List 中,然后使用 GSON 将其转换为 JSON,就像这样

while (resultSet.next()) {
            lhm = new LinkedHashMap<Object, Object>();
            Billdate = resultSet.getString("billdate");
            cash = resultSet.getLong("paytm");
            creditcard = resultSet.getLong("cash");
            swiggy = resultSet.getLong("Swiggy");
            kb = resultSet.getLong("KB");
            bigBasket = resultSet.getLong("BigBasket");
            zomato = resultSet.getLong("Zomato");

            lhm.put("Billdate", Billdate);          
            lhm.put("Paytm", paytm);
            lhm.put("Cash", cash);
            lhm.put("Swiggy", swiggy);
            lhm.put("Kb", kb);
            lhm.put("BigBasket", bigBasket);
            lhm.put("Zomato", zomato);

            mainList.add(lhm);
            str = gson.toJson(mainList);

        }

但这不是解决方案,因为我正在获取 KB,Swiggy 都是硬编码的。

【问题讨论】:

    标签: java mysql servlets


    【解决方案1】:

    这可以通过使用 2 个 sql 查询来完成

    //to convert row on Paymentmode table into column name of syncbill table
        String q1 = "select concat('OTHERPAYMENT',p) as op from Paymentmode where IsActive=Y"; 
        rs = stmt.executeQuery(q1); 
        String str = ""; 
        while(rs.next()) {   
        str += rs.getString(1) + ","; 
        }
    //to get desired result
        String q2 = "select Paytm, Cash," + str.substring(0, str.length()-1) +" from syncbill";
    
    // below this execute q2
    

    【讨论】:

    • 嘿先生我没明白,你能解释一下吗
    • 根据您上面定义的示例表数据,字符串 str 将具有 OTHERPAYMENT1、OTHERPAYMENT2、OTHERPAYMENT3、OTHERPAYMENT4,之后我运行 q1 并得到此结果。
    猜你喜欢
    • 2016-02-06
    • 2014-09-04
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    相关资源
    最近更新 更多