我有以下格式的表格
| ID | 屬性 |
|---|---|
| 1 | 一種 |
| 2 | AA |
| 3 | 一種 |
| 4 | 乙 |
| 5 | BB |
| 1 | BBB |
| 2 | BBBB |
| 6 | 一種 |
| 7 | 一種 |
| 8 | AA |
| 99 | 一種 |
| 8 | 乙 |
| 8 | BBBB |
| 6 | AA |
目標是僅提取 ID 至少匹配一次“A”或“AA”和“B”、“BB”、“BBB”或“BBBB”的這些行。然而,資料可以多次或僅一次匹配這些屬性。盡管如此,它必須至少匹配“A”和“B”屬性組一次。ID 至少出現一次或多次,但出現的上限未知。使用此示例,結果應如下所示:
| ID | 屬性 |
|---|---|
| 1 | 一種 |
| 1 | BBB |
| 2 | AA |
| 2 | 乙 |
| 8 | AA |
| 8 | 乙 |
| 8 | BBBB |
到目前為止我有
select *
from table
where (table.attribute = "A" or table.attribute = "AA" or table.attribute = "B" or table.attribute = "BB" or table.attribute = "BBB" or table.attribute = "BBBB")
這自然會選擇所有 ID,即使它們只匹配“A”或“B”屬性組一次,而不考慮它們是否也至少匹配其他屬性一次。
此處提供的解決方案不起作用,因為 ID 可以使用“A”或“B”屬性出現多次,而沒有其他屬性一次(例如,參見上表中的 6)。不知何故,我需要區分屬性組,但我不知道該怎么做。
uj5u.com熱心網友回復:
我認為以下提供了您想要的輸出,僅選擇存在兩個合格屬性組的不同計數的 ID:
select *
from t
where id in (
select id
from t
group by id
having Count(distinct case when attribute like 'A%' then 1 end) > 0
and Count(distinct case when attribute like 'B%' then 1 end) > 0
)
order by id;
示例小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/430923.html
標籤:mysql
