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=/