Mysql 使用条件选择检查从表中选择
我有一个带有以下两列的表Mysql 使用条件选择检查从表中选择,mysql,sql,select,mysqli,where-in,Mysql,Sql,Select,Mysqli,Where In,我有一个带有以下两列的表foo。创建和删除的类型的参考uid可以相同 +======================================================+ | reference_uid | type | +======================================================+ | 180f28e3-6abd-45a8-b84c-410e908e62ed |
foo
。创建和删除的类型的参考uid
可以相同
+======================================================+
| 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";
我们可以试试这个:
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
,我们可以尝试以下操作:
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
您还可以使用按顺序
和限制
的简单组合:
SELECT *
FROM `foo`
WHERE `reference_uid` = '180f28e3-6abd-45a8-b84c-410e908e62ed'
ORDER BY `type` DESC LIMIT 1
您还可以使用按顺序
和限制
的简单组合:
SELECT *
FROM `foo`
WHERE `reference_uid` = '180f28e3-6abd-45a8-b84c-410e908e62ed'
ORDER BY `type` DESC LIMIT 1
你说“列”的时候好像是指“行”?谢谢。。。更正:)当你说“列”时,你的意思似乎是“行”?谢谢。。。更正:)