gpt4 book ai didi

MySQL if/条件查询?

转载 作者:行者123 更新时间:2023-11-29 06:40:35 25 4
gpt4 key购买 nike

假设我有一个包含以下列的成员表:

id, first, last, email, type, expires, parentid

类型可以是“父”或“子”

如果我查询一个 child 的 ID,我该如何返回 child 信息的名称和 parent 的过期/姓名?

基本上是这样的:

select 
first,
last,
email,
if (type = "child"
select
expires,
first as parent_first,
last as parent_last
from members
where id = parentid)
else ( expires )
from members where id = 100

最佳答案

不要从基于 type = 'child' 动态构造 SQL 的角度来处理它。相反,SQL 对相关集进行操作,因此解决方案实际上是针对自身LEFT JOIN 表,以便始终返回父级(尽管有时可能为 null)。

虽然可以使用带有子选择的 CASE 来交替返回父项或子项 expires 单独,因为您还需要父项的名称列,解决方案是总是返回它们,即使它们可能是NULL

SELECT
c.first AS first,
c.last AS last,
c.email AS email,
c.expires AS expires,
/* parent fields will be NULL if child parentid is NULL */
p.first AS parent_first,
p.last AS parent_last,
p.expires AS parent_expires
FROM
members c
/* join against the same table matching
parentid of the child to id of the parent */
LEFT JOIN members p ON c.parentid = p.id
WHERE
c.id = 100

使用 LEFT JOIN - 因此如果子项没有 parentid 值,则父列将返回 NULL。如果您只想返回 expires 的一个值,您可以使用 COALESCE() 来优先选择父项并在父项为 null 时返回子项:

SELECT
...
COALESCE(p.expires, c.expires) AS expires,

或者使用 CASE 并检查 child 的 type(尽管 COALESCE() 更好):

SELECT
...
CASE WHEN c.type = 'child' THEN p.expires ELSE c.expires END AS expires

关于MySQL if/条件查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21792815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com