我的表有多次相同的origin_id,而origin_id总是有一些action_name。有37个不同的action_names,其中大多数都有一些共同的因素,如“传入”或“einvoice”等。此表还有origin_time值,所以我想将查询限制在某个时间范围内。
此时我的查询正在将所有origin_id和action_name组合在一起,因此多次使用唯一action_name存在相同的origin_id。
我尝试过使用EXISTS和其他版本,但我觉得它不能正常工作。 我甚至可以用EXISTS而不是EXISTS来做这件事吗?
为了清楚,我有这个问题:
select companies.origin_id, actions.action_name
from actions
left join companies on companies.id = actions.company_id
where actions.origin_time between '2016-07-27 00:00:00.0' AND '2016-07-28 23:59:59.0'
and companies.active ="1"
and (action_name LIKE "INTERNAL"
or action_name LIKE "EINVOICE%"
or action_name LIKE "INCOMING%"
)
group by companies.origin_id, actions.action_name
order by actions.action_name;
它给了我这个结果:
origin_id action_name
018a9b67-cfb3-4359-b538-d9be30eaea31 EINVOICE
018a9b67-cfb3-4359-b538-d9be30eaea31 INCOMING_BANK
018a9b67-cfb3-4359-b538-d9be30eaea31 INCOMING_EINVOICE
0070d38e-467e-4fef-920a-41facd385503 EINVOICE
0070d38e-467e-4fef-920a-41facd385503 EINVOICE_BANK
0070d38e-467e-4fef-920a-41facd385503 INCOMING_EINVOICE
0191c907-921a-4548-b6ad-ae6915b938af EINVOICE
0191c907-921a-4548-b6ad-ae6915b938af INCOMING_BANK
0191c907-921a-4548-b6ad-ae6915b938af INCOMING_EINVOICE
0191c907-921a-4548-b6ad-ae6915b938af INCOMING_EINVOICE_INTERNAL
0191c907-921a-4548-b6ad-ae6915b938af INTERNAL
01a2115b-0d21-49f1-a0f3-7c9ddd3da50d EINVOICE
01a2115b-0d21-49f1-a0f3-7c9ddd3da50d INCOMING_EINVOICE
01a2115b-0d21-49f1-a0f3-7c9ddd3da50d INCOMING_EINVOICE_INTERNAL
01a2115b-0d21-49f1-a0f3-7c9ddd3da50d INTERNAL
....
我的问题是我需要查询,它给出了origin_id,其中包含action_name INTERNAL和EINVOICE(以及它的所有变体),但是如果origin_id也有action_name INCOMING(以及它的所有变体)我不知道想要那个origin_id,即使它有另外两个action_names。
我试过的是:
and
(action_name LIKE "INTERNAL%"
or action_name LIKE "EINVOICE%")
and action_name NOT LIKE "INCOMING%"
它有点像。它为我提供了所有包含INTERNAL和EINVOICE action_names的origin_id,并删除了INCOMING,但如果我仔细检查结果,origin_id仍然可以有action_name。