Ein vom Unternehmen betriebenes Einkaufszentrum stellte plötzlich fest, dass es ein Problem mit der Funktion zum Zurückziehen von Bestellungen gab. Eine große Anzahl von Händlern berichtete, dass der Betrag nicht mit dem Bestellbetrag übereinstimmte. Es entstand also ein Bedarf, die Auszahlungstabelle und die Lieferantentabelle als Ergebnissatz zu verwenden, den Bestellbetrag in der Bestelltabelle zu verbinden und den Betrag in der Bestelltabelle mit dem vom Händler abgehobenen Betrag in der Reflexionstabelle zu vergleichen um zu prüfen, ob der Händler mehr Geld abgehoben hat.
Mein Anfrageprozess ist unten aufgezeichnet.
Zu Beginn habe ich im ersten Schritt die Auszahlungstabelle als Haupttabelle verwendet, um die relevanten Ergebnisse abzufragen. Die MySQL-Anweisung lautet wie folgt: Die Abfrageergebnisse sind wie gezeigt normal: und die Abfrage Die Zeit wird offensichtlich verlängert, und die MySQL-Anweisung lautet wie folgt:
SELECT count(ysw.supply_id) AS '提现次数',ysw.user_id AS '供应商对应的用户ID', ysw.supply_id AS '供应商ID' ,SUM(ysw.money) AS '供应商提现总金额', case ysw.pay_type when 10 then '微信' when 20 then '支付宝' else '银行卡' end as '支付方式' , ys.supply_name AS '供应商名称',ys.money AS '供应商余额',ys.freez_money AS '供应商冻结金额(已提现金额)' FROM yoshop_supply_withdraw AS ysw LEFT JOIN yoshop_supply AS ys ON ysw.supply_id = ys.supply_id WHERE ysw.create_time < 1647446400 AND ysw.apply_status IN (10,20,40) GROUP BY ysw.supply_id ORDER BY SUM(ysw.money) DESC ;
Die Vergleichstabelle der Abfrageergebnisse lautet wie folgt:
Nach dem Training möchte ich den Betrag der Auszahlungstabelle und den Betrag der Bestelltabelle direkt abfragen Left Join ist nicht möglich. Durch die Online-Prüfung von Informationen und die Bitte um Rat in der technischen Gruppe optimierte
die Idee: Erstellen Sie gute Statistiken zu Bargeldabhebungen, erstellen Sie gute Statistiken zu Bestellungen und erstellen Sie einen Link basierend auf der Lieferanten-ID für die letzten beiden Ergebnissätze
The Der nächste Schritt ist der erste Schritt: Sammeln Sie die Statistiken der Abhebungen. Der zweite Schritt: Sammeln Sie die Daten der Bestelltabelle. Aufgrund der Verwendung des Systems verwende ich direkt die Bestellprodukttabelle, um die Gesamtbestellmenge zu berechnen. Auch dieser Schritt ist in drei Schritte unterteilt. Ich gebe den Code direkt ein:
SELECT count(ysw.supply_id) AS '提现次数',ysw.user_id AS '供应商对应的用户ID', ysw.supply_id AS '供应商ID' ,SUM(ysw.money) AS '供应商提现总金额', case ysw.pay_type when 10 then '微信' when 20 then '支付宝' else '银行卡' end as '支付方式' , ys.supply_name AS '供应商名称',ys.money AS '供应商余额',ys.freez_money AS '供应商冻结金额(已提现金额)',SUM(yo.pay_price) FROM yoshop_supply_withdraw AS ysw LEFT JOIN yoshop_supply AS ys ON ysw.supply_id = ys.supply_id LEFT JOIN yoshop_order AS yo ON yo.supply_ids =ysw.supply_id WHERE ysw.create_time < 1647446400 AND ysw.apply_status IN (10,20,40) GROUP BY ysw.supply_id ORDER BY SUM(ysw.money) DESC ;Der nächste Schritt besteht darin, den ersten und zweiten Schritt abzufragen Schritte Das Ergebnis wird als abgeleitete Tabelle für die Left-Join-Abfrage verwendet. Dies ist der Schritt, in den ich die meiste Zeit und Energie investiere. Wenn Sie es sorgfältig lesen können, glaube ich, dass Sie es erhalten werden. Ich habe hier auch meinen fehlerhaften Vorgang aufgezeichnet:
1.查询yoshop_order所有进行中,已完成的 订单id(order_id); SELECT order_id FROM yoshop_order WHERE order_status IN (10,30); 2.查询没有退款的订单ID SELECT order_id FROM yoshop_order WHERE order_status IN (10,30) AND order_id NOT IN ( SELECT order_id FROM yoshop_order_refund); 3.查询订单商品表中 所有的订单金额 SELECT supply_id AS '供应商ID' , SUM(total_pay_price) AS '供应商订单总金额' FROM yoshop_order_goods WHERE create_time < 1647446400 AND order_pay_status = 0 AND order_id IN(SELECT order_id FROM yoshop_order WHERE order_status IN (10,30) AND order_id NOT IN ( SELECT order_id FROM yoshop_order_refund) ) GROUP BY supply_id ORDER BY SUM(total_pay_price) DESC ;Durch dieses Ausprobieren wurde klar, dass ich mich an die Bedeutung von „Left Join“ und „Union All“ geirrt und sie beim Spleißen wiederverwendet hatte. Obwohl es ein Versuch und Irrtum war, kam die Ware an und dann wurde das zweite falsche Spleißen durchgeführt:
SELECT * FROM ( SELECT count(ysw.supply_id) AS '提现次数',ysw.user_id AS '供应商对应的用户ID', ysw.supply_id AS 'supply_id' ,SUM(ysw.money) AS '供应商提现总金额', case ysw.pay_type when 10 then '微信' when 20 then '支付宝' else '银行卡' end as '支付方式' , ys.supply_name AS '供应商名称',ys.money AS '供应商余额',ys.freez_money AS '供应商冻结金额(已提现金额)' FROM yoshop_supply_withdraw AS ysw LEFT JOIN yoshop_supply AS ys ON ysw.supply_id = ys.supply_id WHERE ysw.create_time < 1647446400 AND ysw.apply_status IN (10,20,40) GROUP BY ysw.supply_id ORDER BY SUM(ysw.money) DESC ) AS t1 union all // left join ,这里是注释记得删除 SELECT * FROM -- 这里是错误的不应该在查询 (SELECT supply_id AS 'supply_id' , SUM(total_pay_price) AS total_pay_price FROM yoshop_order_goods WHERE create_time < 1647446400 AND order_pay_status = 0 AND order_id IN( SELECT order_id FROM yoshop_order WHERE order_status IN (10,30) AND order_id NOT IN ( SELECT order_id FROM yoshop_order_refund) ) GROUP BY supply_id ORDER BY SUM(total_pay_price) DESC ) AS t2 ON t1.suppply_id = t2.suppply_idDurch diese beiden falschen Versuche und basierend auf den Fehleraufforderungen, die MySQL während des Versuchs gab, wusste ich, dass ich ich war Ich habe am Anfang einen Fehler gemacht, als ich alle Felder abgefragt habe. Ich kann nach dem Left Join nicht die Syntax verwenden, die ich gelernt habe, und habe das endgültige korrekte Abfrageergebnis geschrieben Ergebnis-Screenshot:
Das obige ist der detaillierte Inhalt vonBeispielanalyse einer von MySQL abgeleiteten Tabellenverknüpfungstabellenabfrage. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!