简体   繁体   English

MySQL查询分析结果并标记它们

[英]MySQL query to analyze results and tag them

I have two mysql tables: invoices and payments. 我有两个mysql表:发票和付款。 I would like to list all invoicerows for a certain period AND a note on if it is paid or not.. 我想在一段时间内列出所有的invoicerow,并注明是否付款。

SELECT invoices.i_id, invoices.sum, IF EXISTS (Select * from payments WHERE payments.i_id = invoices.i_id) THEN 'PAID' ELSE 'NOT PAID')
FROM invoices
WHERE invoices.date >= 2014-01-01
AND invoices.date <= 2014-01-31

RESULTING: 由于:

1252515  122,50 PAID
1252514  150,40 PAID
1257425 1180,40 NOT PAID

and so on... Does not work. 等等......不行。 Can this be done in a (mysql) query? 这可以在(mysql)查询中完成吗?

You can use JOIN with CASE 您可以将JOINCASE

SELECT i.i_id, i.`sum`,
(CASE WHEN p.i_id IS NOT NULL THEN 'PAID' ELSE 'NOT PAID' END) `status`
FROM invoices i
LEFT JOIN payments p ON(p.i_id = i.i_id)
WHERE i.date >= 2014-01-01
AND i.date <= 2014-01-31

Another way you can also use IF 另一种方式你也可以使用IF

SELECT i.i_id, i.`sum`,
   IF(p.i_id IS NULL, 'NOT PAID', 'PAID')  `status`
FROM invoices i
LEFT JOIN payments p ON(p.i_id = i.i_id)
WHERE i.date >= 2014-01-01
AND i.date <= 2014-01-31

Try using CASE instead of IF.: 尝试使用CASE而不是IF:

CASE WHEN EXISTS (Select * from payments WHERE payments.i_id = invoices.i_id) THEN 'PAID' ELSE 'NOT PAID' END

Simple example (fiddle) : 简单的例子(小提琴)

CREATE TABLE tbl1 (id INT);
CREATE TABLE tbl2 (id INT);

INSERT INTO tbl1 VALUES (1),(2);
INSERT INTO tbl2 VALUES (1);

SELECT id
      ,CASE WHEN EXISTS (SELECT * FROM tbl2 WHERE tbl2.id = tbl1.id) THEN 'PAID' ELSE 'NOT PAID' END
  FROM tbl1

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM