繁体   English   中英

MySQL SELECT与多个相似行不同

[英]MySQL SELECT distinct with multiple similar rows

我正在努力获取正确的数据返回,我有一个具有以下数据结构的表:

# order_id, name
'10434', 'docs_sent'
'10433', 'placed'
'10433', 'docs_sent'
'10433', 'agreement_received'
'10432', 'placed'
'10431', 'placed'
'10431', 'docs_sent'
'10430', 'placed'
'10430', 'docs_sent'
'10430', 'agreement_received'
'10429', 'placed'
'10429', 'docs_sent'
'10429', 'agreement_received'
'10428', 'placed'
'10428', 'docs_sent'
'10427', 'placed'

我想做的是返回一个唯一的“ order_id”,其中“名称”不包括concept_received。 因此,为澄清起见,我正在寻找一个订单号“ order_id”的列表,其中该订单号没有任何记录,带有“ concept_received”的记录。问题是每个订单都有多个条目,我似乎无法正确输入。请帮助!

输出应类似于:

# order_id
'10434'
'10432'
'10431'
'10428'
'10427'

您可以通过 ORDER_ID只保留 “agreement_received”记录那些order_ids想

select order_id
from mytable
group by order_id
having sum(name = 'agreement_received') = 0;

(这使用MySQL的特殊布尔处理。False = 0,True =1。在其他dbms中,您将不得不使用sum(case when name = 'agreement_received' then 1 else 0 end) 。)

select distinct order_id
from orders
where name != 'agreement_received';

那对你有用吗?

尝试类似:

SELECT order_id
FROM MyTable
WHERE name <> 'agreement_received'
GROUP BY order_id
HAVING COUNT(order_id) = 1

如果您的表名是t

select distinct t1.order_id
from t as t1
where t1.order_id not in
   (select t2.order_id
    from t as t2
    where t2.name = 'agreement_received')

输出:

+----------+
| order_id |
+----------+
|    10434 |
|    10432 |
|    10431 |
|    10428 |
|    10427 |
+----------+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM