MYSQL查询-当col1只有“特殊”用途时,其他的使用另一个

MYSQL查询-当col1只有“特殊”用途时,其他的使用另一个,mysql,sql,having,Mysql,Sql,Having,以下数据集 ID | Description | Type ------------------------------- 12204 | ABC | Special 12204 | DEF | Connector 12541 | GHI | Special 12541 | JKL | Special 12541 | MNO | Hybrid 13292 | PQR | Resistor 1

以下数据集

  ID  | Description |   Type
-------------------------------
12204 |     ABC     | Special
12204 |     DEF     | Connector
12541 |     GHI     | Special
12541 |     JKL     | Special
12541 |     MNO     | Hybrid
13292 |     PQR     | Resistor
13292 |     STU     | Connector
13292 |     VWX     | Hybrid
14011 |     YZa     | Special
14012 |     bcd     | Resistor
我想从中得到的是:

  ID  | Description |   Type
-------------------------------
12204 |     DEF     | Connector
12541 |     MNO     | Hybrid
13292 |     PQR     | Resistor or Connector or Hybrid <-- doesn't matter
14011 |     YZa     | Special
14012 |     bcd     | Resistor
希望任何人都能提供帮助:
你可以这样试试

SELECT
  l.id,
  l.description,
  IF(r.type IS NULL, l.type, r.type) AS `Type`
FROM newtable as l
  LEFT JOIN (SELECT *
         FROM newtable
         WHERE type <> 'Special') as r
    on r.id = l.id
GROUP BY l.id

你可以这样试试

SELECT
  l.id,
  l.description,
  IF(r.type IS NULL, l.type, r.type) AS `Type`
FROM newtable as l
  LEFT JOIN (SELECT *
         FROM newtable
         WHERE type <> 'Special') as r
    on r.id = l.id
GROUP BY l.id

这可能是一个解决方案:

SELECT 
    newtable.id, 
    newtable.description, 
    newtable.type
FROM newtable 
INNER JOIN(
           SELECT
              id, 
              MAX(CASE WHEN Type!='Special' THEN Type END) type
           FROM newtable
           GROUP BY id
      ) mx
  ON newtable.id=mx.id
     AND newtable.type=COALESCE(mx.type, 'Special')

提琴谢谢拉希尔·山的提琴

这可能是一个解决方案:

SELECT 
    newtable.id, 
    newtable.description, 
    newtable.type
FROM newtable 
INNER JOIN(
           SELECT
              id, 
              MAX(CASE WHEN Type!='Special' THEN Type END) type
           FROM newtable
           GROUP BY id
      ) mx
  ON newtable.id=mx.id
     AND newtable.type=COALESCE(mx.type, 'Special')

提琴谢谢拉希尔·山的提琴

使用countType>1@KT_Adi如果答案满足您的要求,您不认为您应该接受吗使用countType>1@KT_Adi如果答案符合你的要求,你不认为你应该接受吗?实际上我点击了“向上投票”按钮,但它向上投票如果你是这个意思的话,我点击了“向上投票”按钮,但它会上升到4,然后切换回3=/