繁体   English   中英

根据多个字段值标准选择不同的字段值

[英]Selecting distinct field value based on multiple field values criteria

我有下表:

INSERT INTO tbl_test (id, name, type, value, confirmed) VALUES
        (1, 'Tom', 'good', 'white', 1),
        (2, 'Tom', 'bad', 'red', 1),
        (3, 'Tom', 'fine', 'blue', 1),
        (4, 'Tom',  'ok', 'black', 1),
        (5, 'Alan', 'bad', 'yellow', 0),
        (6, 'Alan', 'good', 'red', 0),
        (7, 'Bob', 'nice', 'white', 0),
        (8, 'Bob', 'ok', 'pink', 0),
        (9, 'Joe', 'good', 'white', 0),
        (10, 'Joe', 'bad', 'pink', 0),
        (11, 'Joe', 'nice', 'red', 0),
        (12, 'Joe', 'fine', 'blue', 0)

我想选择所有类型为'ok'或任何其他类型的不同名称(不准确显示)。 所以输出应该是这样的:

name    type    value           confirmed
Tom     ok      black           1
Alan    other   NULL/ /other    0
Bob     ok      pink            0
Joe     other   NULL/ /other    0

有没有什么办法可以通过单个查询来实现,而无需对 php 端的数据进行操作?

我尝试使用子查询

SELECT name, type, value, confirmed
  FROM tbl_test
 WHERE type = 'ok'
    OR name IN (SELECT DISTINCT names FROM tbl_test WHERE type != 'ok');

但即使我尝试只选择名称,我也会遇到错误。 您能否提一些建议?

谢谢,马辛

对于不包含ok类型的案例,您可以在包含oktype案例和NOT EXISTS的案例之间使用UNION ALL

SELECT DISTINCT name, type, value, confirmed
  FROM tbl_test
 WHERE type = 'ok'
 UNION ALL
SELECT name, 'other', 'NULL/ /other', MAX(confirmed)
  FROM tbl_test t
 WHERE NOT EXISTS (SELECT 0 FROM tbl_test WHERE type = 'ok' and name = t.name)
 GROUP BY name

演示

您可以对表进行不同名称的LEFT连接:

select n.name,
       coalesce(t.type, 'other') type,
       coalesce(t.value, 'NULL / other') value,
       coalesce(t.confirmed, 0) confirmed
from (select distinct name from tbl_test) n
left join tbl_test t
on t.name = n.name and t.type = 'ok' 

请参阅演示
结果:

| name | type  | value        | confirmed |
| ---- | ----- | ------------ | --------- |
| Tom  | ok    | black        | 1         |
| Bob  | ok    | pink         | 0         |
| Alan | other | NULL / other | 0         |
| Joe  | other | NULL / other | 0         |

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM