- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个有趣的问题 - 我需要 JOIN 语句的完全相反。
我有一个名为 invoices 的表和另一个名为 payments 的表。我想按顺序检索没有任何付款的发票,但之后是有付款的行。
发票表有这些字段:
payments 表有这些字段:
并非所有付款都是全额付款,因此每张发票可能附有多笔付款。
我希望首先显示未付发票(无付款),然后是部分付款但未全额付款的发票,然后是全额付款的发票。
如果可以的话,我希望在执行此操作时不必运行单独的 SQL 查询 - 我宁愿它是一个查询,这样我就可以吐出一次。有任何想法吗?
-- 已更新--
根据 DCP 的回答,我更新了查询方法。我一直在工作,直到我需要添加该 JOIN 语句以按我的 sub_to_inv 表进行排序,如下所示:
id 订阅发票0 12 181 13 182 14 19
等
基于此我想到了这个(在末尾添加了 LIMIT ot limit by pages..)
SELECT i.id AS id, i.modify_date as modify_date, s.subscription as subscriptionid, 0 paidratio FROM invoices i
LEFT JOIN sub_to_inv s ON i.id=s.invoice
WHERE NOT EXISTS (SELECT id FROM payments p WHERE p.invoice=i.id) AND i.corporation='3' AND i.payer=1
UNION ALL
SELECT i.id AS id, i.modify_date as modify_date, s.subscription as subscriptionid, p.paid/i.total AS paidratio FROM invoices i,
(SELECT p.invoice, sum(amount) AS paid FROM payments p GROUP BY p.invoice) p
LEFT JOIN sub_to_inv s ON i.id=s.invoice
WHERE p.invoice=i.id AND i.corporation='3' AND i.payer=1
AND p.paid UNION ALL
SELECT i.id AS id, i.modify_date as modify_date, s.subscription as subscriptionid, p.paid/i.total AS paitratio FROM invoices i,
(SELECT p.invoice, sum(amount) AS paid FROM payments p WHERE p.invoice=id GROUP BY p.invoice) p
LEFT JOIN sub_to_inv s ON i.id=s.invoice
WHERE p.invoice = i.id AND i.corporation='3' AND i.payer=1
AND p.paid=i.total
ORDER BY paidratio DESC, modify_date DESC, subscriptionid ASC LIMIT 0,40
我收到一个“未找到 i.id 列”错误,但我没有收到。在最终通过 UNION 语句组合的每个语句 block 上,我指定 invoices i
以确保 i.id 指的是发票的 id。 tab.e
最佳答案
您没有告诉我们如何确定总发票金额,但我假设您的发票表上有一些字段与此相关。在下面的示例中,我假设它称为 TOT_AMT。
这种方法背后的想法是,我们通过三个独立的步骤获取数据,然后使用 UNION ALL 将这三个部分粘合在一起。我们使用一个名为 PAY_TYPE 的伪列来获得您想要的顺序,即首先是没有付款的发票,然后是部分付款的发票,最后是全额付款的发票。
下面显示了一个完整的工作示例(我使用的是 Oracle,但我认为您可以轻松地将其适应 MySQL)。
CREATE TABLE invoices (ID number, tot_amt NUMBER);
CREATE TABLE payments (ID NUMBER, invoice_id NUMBER, amount NUMBER);
INSERT INTO invoices VALUES (1,100);
INSERT INTO invoices VALUES (2,200);
INSERT INTO invoices VALUES (3,300);
INSERT INTO payments VALUES (1,1,20);
INSERT INTO payments VALUES (2,1,40);
INSERT INTO payments VALUES (3,3,150);
INSERT INTO payments VALUES (4,3,120);
INSERT INTO payments VALUES (5,3,30);
/* get invoices with no payments */
SELECT i.id
, i.TOT_AMT
, 0 TOT_PAID
, '0_NO_PAYMENTS' PAY_TYPE
FROM invoices i
WHERE NOT EXISTS (SELECT * FROM PAYMENTS P WHERE P.INVOICE_ID = I.ID)
UNION ALL
/* get invoices with partial payments */
SELECT i.id
, i.TOT_AMT
, p.tot_paid
, '1_PARTIALLY_PAID' PAY_TYPE
FROM invoices i
, (SELECT P.INVOICE_ID
, SUM(AMOUNT) tot_paid
FROM PAYMENTS P
GROUP BY P.INVOICE_ID) p
WHERE P.INVOICE_ID = I.ID
AND p.TOT_PAID < i.TOT_AMT
UNION ALL
/* get invoices that are fully paid */
SELECT i.id
, i.TOT_AMT
, p.tot_paid
, '2_FULLY_PAID' PAY_TYPE
FROM invoices i
, (SELECT P.INVOICE_ID
, SUM(AMOUNT) tot_paid
FROM PAYMENTS P
GROUP BY P.INVOICE_ID) p
WHERE P.INVOICE_ID = I.ID
AND p.TOT_PAID = i.TOT_AMT
ORDER BY PAY_TYPE
结果:
ID TOT_AMT TOT_PAID PAY_TYPE
2 200 0 0_NO_PAYMENTS
1 100 60 1_PARTIALLY_PAID
3 300 300 2_FULLY_PAID
关于mysql - 如何从表 1 中检索在 MySQL 中表 2 中没有相关行的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6753689/
我有一张用户表 users +------+ - user_id ... ... - updated_by 据我所知,updated_by 列应该在 user_id 列上引用此表。我不确定,这
我是 SQL 新手,我有 2 个包含这些列的表: table structures__|id|name|nation_id|image| table nations______|id|nation|
我正在使用 codeigniters sql 选择来选择不在一组 id 中的用户。 $this->db->select('fbuid')->where_in('fbuid', $friends); $
找不到具体的答案所以我想问一下。简而言之,我有一个表,它根据存储在我的数据库中的数据从 API 检索信息,我想要做的就是从该表中获取某些列的总数,而不是全部列,以便我可以在其他地方使用它们网站。例如,
这是 phpMyAdmin 为我生成的 SQL 语句: SELECT * FROM `table_name` WHERE 1 可以看到 table_name 被 ` 字符包围。 为什么? 最佳答案 用
我有两个这样的表 我想在这里从 Table1 插入到 Table2。这就是我想要的。 取 MOU = 10。它在同一行中有 num1 和 hour1。我想将它插入到与 num1 同一行与 hour1
我的任务是使用 C++ 编写一个程序,以使用 Gamma 分布计算概率。如果我已经找到函数值,如何将其更改为 Gamma 分布表中的值?我不知道公式。 例如Fg(8;8),在表中为0.5470。而表中
我在查看 HTML 电子邮件时遇到问题,需要格式化 css 以与 HTML 脚本内联。 我有多个表使用的以下 td css。 td.gridtopleft { border-left: solid
我正在使用来自 pip 的最新 sqlalchemy 和最新的 pymssql 连接 mssql 服务器 8.00.2039(2005 年?)困难在于表和列名称是俄语。是否可以用 sqlalchemy
我有一个有趣的问题 - 我需要 JOIN 语句的完全相反。 我有一个名为 invoices 的表和另一个名为 payments 的表。我想按顺序检索没有任何付款的发票,但之后是有付款的行。 发票表有这
我有两个表: 主题:[id, ...] 类别:[主题.id, ...] 我想从表 #1 中选择所有主题,但不包含 #2(类别)中的条目。 任何提示表示赞赏(: 最好的问候 最佳答案 Sachin 已经
MYSQL: 我正在使用表 information_schema.tables 中的 AUTO_INCRMENT 列来获取下一个 id。 如下: SELECT AUTO_INCREMENT FROM
我是一名优秀的程序员,十分优秀!