[英]MySQL query to analyze results and tag them
我有兩個mysql表:發票和付款。 我想在一段時間內列出所有的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
由於:
1252515 122,50 PAID
1252514 150,40 PAID
1257425 1180,40 NOT PAID
等等......不行。 這可以在(mysql)查詢中完成嗎?
您可以將JOIN
與CASE
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
另一種方式你也可以使用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
嘗試使用CASE而不是IF:
CASE WHEN EXISTS (Select * from payments WHERE payments.i_id = invoices.i_id) THEN 'PAID' ELSE 'NOT PAID' END
簡單的例子(小提琴) :
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.