使用条件SELECT检查的SELECT FROM表

时间:2018-06-20 11:20:44

标签: mysql sql select mysqli where-in

我有一个带有两列的表fooreference_uid的{​​{1}}可以是CREATE和DELETE。

type

下面的查询返回我两行;

+======================================================+
|  reference_uid                         |    type     | 
+======================================================+
| 180f28e3-6abd-45a8-b84c-410e908e62ed   | CREATE      | 
| 180f28e3-6abd-45a8-b84c-410e908e62ed   | DELETE      | 
+------------------------------------------------------+

但是我想要这样的查询,它只返回我一行。如果存在类型为DELETE的行,则返回给我类型为DELETE的行,否则返回给定类型为CREATE的行(请注意,类型为CREATE的行将始终存在)。

我想我需要在SELECT语句中创建SELECT吗? 我的失败尝试是

SELECT type FROM foo WHERE `reference_uid` = '180f28e3-6abd-45a8-b84c-410e908e62ed';

2 个答案:

答案 0 :(得分:2)

您还可以使用ORDER BYLIMIT的简单组合:

SELECT *
FROM `foo`
WHERE `reference_uid` = '180f28e3-6abd-45a8-b84c-410e908e62ed'
ORDER BY `type` DESC LIMIT 1

答案 1 :(得分:1)

我们可以尝试一下:

SELECT
    reference_uid,
    MAX(type) AS max_type
FROM foo
WHERE reference_uid = '180f28e3-6abd-45a8-b84c-410e908e62ed'
GROUP BY
    reference_uid;

之所以可行,是因为在字典上,文本DELETECREATE大,因此假设存在DELETE,则先选择前者,再选择后者。如果DELETE 不存在,则默认情况下,它将只选择CREATE