Mysql

查找總計不匹配的行

  • June 17, 2021

MariaDB MySQL

嘗試在兩個表上執行看似基本查詢(連接)的操作。

收據

部分

當每個小計的總計parts.receipt_id不等於時,嘗試從第一個表中獲取該行receipts.id.total

我的屠殺嘗試包括:

SELECT `receipts`.*
FROM `receipts` 
LEFT JOIN ON `receipts`.`id`=`parts`.`receipt_id` 
WHERE SUM(`parts`.`subtotal`) != `receipts`.`total` 
GROUP BY `parts`.`receipt_id`;

目前在 PHP 中使用 compare 的工作(非常低效)。

您可以使用子查詢,只要它們只返回 1 個值(行)

SELECT 
   r.*
FROM
   receipts r
WHERE
   (SELECT 
           SUM(parts.subtotal)
       FROM
           parts
       WHERE
           receipt_id = r.id) != r.total;

如您所見,這很有效。

如果您的數據有其他設計,請提供更改後的 dbfille

CREATE TABLE receipts (id  int,   `date`date,     supplier varchar(10),   total DECIMAL(10,2))
INSERT INTO receipts VALUES (1,NOW(),'a',100.1),(2,NOW(),'b',200.2)
CREATE TABLE parts (id    int, receipt_id     int , partType varchar(10),     subtotal DECIMAL(10,2))
INSERT INTO parts VALUEs (1,1,'a',20.0),(2,1,'a',20.0),(3,1,'a',20.1),(4,1,'a',20.0),(2,1,'a',20.0),
(6,2,'a',50.0),(7,2,'a',150.0)
SELECT 
    r.*
FROM
    receipts r
WHERE
    (SELECT 
            SUM(parts.subtotal)
        FROM
            parts
        WHERE
            receipt_id = r.id) != r.total;
編號 | 日期 | 供應商| 全部的
-: | :--------- | :------- | -----:
 2 | 2021-06-17 | 乙 | 200.20
 SELECT 
    r.* ,  (SELECT 
            SUM(parts.subtotal)
        FROM
            parts
        WHERE
            receipt_id = r.id) sumsubtotal
 FROM
    receipts r
            
編號 | 日期 | 供應商| 總計| 總和小計
-: | :--------- | :------- | -----: | ----------:
 1 | 2021-06-17 | 一個 | 100.10 | 100.10
 2 | 2021-06-17 | 乙 | 200.20 | 200.00

db<>在這裡擺弄

引用自:https://dba.stackexchange.com/questions/294424