下面是我的表结构
user_id quote_id bill_type(2=>proforma,1=>invoice)
474 676 2
674 676 2
474 676 1
445 680 2
422 120 2
411 240 2
411 240 2
410 240 2
410 240 1
基本上在我的门户网站中,我们有Buyer和Seller(user_id),并且两者都可以使用特定的quote_id进行买卖,如上表所示。一对特定的买卖双方可以具有多个quote_id。(您可以考虑在亚马逊的情况下,特定买方可以从特定卖方购买多种产品。这里的产品将是quote_id)
这里bill_type是指发票(1)或形式(2)。发票将仅发送给用户一次,并且针对特定quote_id可以多次发送形式发票。现在的问题是,我想返回数据,以便应返回尚未为特定quote_id生成发票的用户。
如果考虑以上情况,则返回的数据应为:
user_id quote_id bill_type(2=>proforma,1=>invoice)
674 676 2
445 680 2
422 120 2
411 240 2
这是尚未针对特定quote_id生成账单的用户。
到目前为止,我设法进行的查询是:
select *, GROUP_CONCAT(bill_type) as bt,GROUP_CONCAT(user_id)
from quote
GROUP BY quote_id
现在,我要删除其发票是在程序帮助下生成的用户。但这不是正确的方法,我需要查询才能实现此目的。
您可以使用WHERE NOT EXISTS
子句来执行此操作,以检查是否没有针对特定user_id/quote_id
组合发送匹配的发票:
SELECT DISTINCT q1.user_id, q1.quote_id, q1.bill_type
FROM quote q1
WHERE NOT EXISTS (SELECT *
FROM quote q2
WHERE q2.user_id = q1.user_id AND q2.quote_id = q2.quote_id AND q2.bill_type = 1)
输出:
user_id quote_id bill_type
674 676 2
445 680 2
422 120 2
411 240 2
将DISTINCT
在SELECT
确保您不会在情况下超过一个形式发票被发送(如组合二百四十〇分之四百十一)获得多行。
要处理quote_id为NULL并且您不希望输出中包含这些行的情况,请将查询更改为:
SELECT DISTINCT q1.user_id, q1.quote_id, q1.bill_type
FROM quote q1
WHERE NOT EXISTS (SELECT *
FROM quote q2
WHERE q2.user_id = q1.user_id AND q2.quote_id = q2.quote_id AND q2.bill_type = 1)
AND q1.quote_id IS NOT NULL
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句