【问题标题】:How do I join two tables and compare them? (I've asked several times, but I couldn't find the answer.)如何连接两个表并比较它们? (我问了好几次,但我找不到答案。)
【发布时间】:2020-07-26 16:38:46
【问题描述】:

我只想比较表 1 和表 2 一次。 我想在每一面打印与错误金额或数据错误相同的金额。

1.表名:hospital_payment_data

id    chart_num        chart_name          visit            card_amount_received
1        9740            t1             2019-01-02               1000                        
2        23143           t2             2019-01-02               3000          
3        14220           t3             2019-01-02               3000                        
4        2000            t4             2019-01-02               4000      
5        3000            t5             2019-01-02               5000      
6        3000            t5             2019-01-02               5000      
7        4000            t6             2019-01-02               6000      
8        5000            t7             2019-01-02               6000      

2.表名:credit_card

id           card_date             advenced_amount
1           2019-01-02                 1000        
2           2020-01-02                 2000   
3           2020-01-02                 3000 
4           2020-01-02                 4000 
5           2020-01-02                 10000 
6           2020-01-02                 6000 
7           2020-01-02                 9000 

我想要结果

在我的查询中:

SELECT
    hospital_payment_data.id,
  chart_num,
    visit,
  chart_name,
  sum(card_amount_received) as card_amount_received,
  credit_card.card_date,
  credit_card.amount as amount,
  if(credit_card.amount = sum(card_amount_received), 'ok', 'error') as result
from hospital_payment_data
left join credit_card on date(credit_card.card_date) = visit AND hospital_payment_data.card_amount_received = credit_card.amount
GROUP BY chart_num, visit

这是我的错误结果:

是否必须添加或修改数据库表才能按需要打印?还是我必须添加关系?指定了所有可用的数据值。

【问题讨论】:

  • 正如你所说,你已经问过很多次了。你接受了一个答案:stackoverflow.com/questions/61135166/…
  • @lurker 我试过了,但没有成功。
  • 如果它不起作用,你为什么接受它?您应该已经对该答案进行了评论,并提供了一些信息来解释为什么它确实回答了您的问题。
  • 问题的一部分(以及为什么您之前没有收到回复)是完全清楚您所追求的。我正在查看您的表格和您的“我想要结果”,但无法理解它。您说,我想打印与错误金额相同的金额,但是当金额相同时,您想要的结果表显示“ok”。您需要进一步解释您要比较的是什么。
  • 也许您正在寻找一个FULL OUTER JOIN,它在MySQL 中不存在?可以模拟;搜索它。

标签: mysql sql database mariadb


【解决方案1】:

我想这就是你所追求的。让我知道您是否需要其他东西。您可能应该在 credit_card 中有 chart_num,这样您就可以将这些表连接在一起。

Select hpd.chart_num,
hpd.chart_name
hpd.visit,
hpd.card_amount_received,
cc.card_date, 
CASE WHEN hpd.card_amount_received = SUM(cc.advenced_amount) THEN hpd.card_amount_received  ELSE NULL END AS ‘amount’,
CASE WHEN hpd.card_amount_received > SUM(cc.advenced_amount) THEN ‘error’ ELSE ‘ok’ END AS ‘result’
 from hospital_payment_data hpd
LEFT JOIN credit_card ON cc.chart_num=hpd.chart_num AND 
date(cc.card_date) = date(hpd.visit)
GROUP BY hpd.chart_num, hpd.visit;

有一个 client_visit 表可能是一个好主意,以防客户一天来办公室两次,或者制定了一个他们来办公室当天不付款的付款计划。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 2019-10-20
    • 2021-11-13
    • 2017-11-22
    • 1970-01-01
    相关资源
    最近更新 更多