使用条件选择检查从表中选择

lh80um4z  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(330)

我有一张table foo 包含以下两列。这个 reference_uid 可以是相同的 type 创建和删除。

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

下面的查询返回我的两行;

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

但我希望这样的查询只返回一行。如果存在类型为delete的行,则返回类型为delete的行,否则返回类型为create的行(注意,类型为create的行将始终存在)。
我想我需要在select语句中创建select?我失败的尝试是;

SELECT type FROM foo WHERE type IN (SELECT type FROM foo WHERE `reference_uid` = '180f28e3-6abd-45a8-b84c-410e908e62ed') WHERE type = "DELETE";
drkbr07n

drkbr07n1#

我们可以试试这个:

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 .

gz5pxeao

gz5pxeao2#

你也可以把 ORDER BY 以及 LIMIT :

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

相关问题