簡體   English   中英

當字段等於許多值時,從mysql表中選擇值

[英]Select value from mysql table when field equal to many values

我有2個字段的簡單mysql表:

atr_id | atr_val_id
1      | 100
1      | 200
1      | 300
2      | 100
3      | 100
3      | 200
4      | 200

例如,如何選擇具有atr_val_id = 100 AND 200且僅此的所有atr_ids值? 在該示例中,這僅是atr_id = 3。 或例如僅200,則為atr_id = 4

可能會有更簡單的方法。 這是一種使用group by,group_contact,distinct,sort和Have子句的混合來獲取所需結果的解決方案

所有atr_val_id = 100和200的atr_ids值,僅此而已。 這只會返回atr_id = 3

select 
    atr_id 
from 
    tbl_test
group by 
    atr_id
having 
    group_concat(distinct atr_val_id order by atr_val_id asc) = '100,200'

並且僅返回200,這將返回atr_id = 4

select 
    atr_id 
from 
    tbl_test
group by 
    atr_id
having 
    group_concat(distinct atr_val_id order by atr_val_id asc) = '200'

另一種方法是使用如下的NOT EXISTS

select atr_id 
from table_name t1 
where atr_val_id in(100,200)
AND NOT EXISTS
(
  select 1
  from table_name t2
  where t2.atr_id = t1.atr_id
  group by t2.atr_id
  having count(t2.atr_val_id) < 2 OR count(t2.atr_val_id) > 2 

)
group by t1.atr_id
;

您可以根據要查看的atr_val_id的數量來更改計數部分。 只需說200就可以了

having count(t2.atr_val_id) < 1 OR count(t2.atr_val_id) > 1

隨后,您還需要更改IN子句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM