我有一个带有两列的表foo
。 reference_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';
答案 0 :(得分:2)
您还可以使用ORDER BY
和LIMIT
的简单组合:
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;
之所以可行,是因为在字典上,文本DELETE
比CREATE
大,因此假设存在DELETE
,则先选择前者,再选择后者。如果DELETE
不存在,则默认情况下,它将只选择CREATE
。