MYSQL 的等效 CASE 语句中的结构化 If / Else 语句
Structured If / Else Statements In MYSQL's Equivalent CASE Statements
我正在尝试创建与我在下面使用 CASE 语句在 MYSQL 中使用简单的 if/else 语句演示的相同类型的逻辑。
基本上,如果第一个条件是正确的,那么我将放弃其余的。如果第一个没有,但第二个没有,则放弃其余部分等。
所以在这种情况下,我将从左到右填充数据库中的第一个空白列,意思是 "nwc_signup",如下所示。
if(rota.nwc_signup_1 = '') {
rota.nwc_signup_1 = ?
} else {
if(rota.nwc_signup_2 = '') {
rota.nwc_signup_2 = ?
} else {
if(rota.nwc_signup_3 = '') {
rota.nwc_signup_3 = ?
} else {
if(rota.nwc_signup_4 = '') {
rota.nwc_signup_4 = ?
}
}
}
}
我试过在 MYSQL 中使用 CASE 语句,但它会标记错误。有没有人有一个巧妙的想法来帮助我们将不胜感激。
UPDATE
`rota`
INNER JOIN `signups`
ON
signups.signups_user_id = rota.signups_user_id
INNER JOIN `pre_rota`
ON
pre_rota.signups_user_id = signups.signups_user_id
SET
CASE
WHEN rota.nwc_signup_1 = ''
THEN rota.nwc_signup_1 = ?
ELSE
CASE
WHEN rota.nwc_signup_2 = ''
THEN rota.nwc_signup_2 = ?
ELSE
END
END,
WHERE
pre_rota.nwc_username = 'jacktrow'
MYSQL 错误:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASE
WHEN rota.nwc_signup_1 = ''
THEN SET rota.nwc_si' at line 15
case
不能用在[=12=的左边,只能用在右边。您可以对每一列使用 case
:
SET rota.nwc_signup_1 = (CASE WHEN rota.nwc_signup_1 = '' THEN ? ELSE END),
rota.nwc_signup_2 = (CASE WHEN rota.nwc_signup_1 = '' THEN rota.nwc_signup_2
WHEN rota.nwc_signup_1 = '' THEN ?
ELSE rota.nwc_signup_2
END)
下面的 SQL 似乎工作得很好。数据将被插入到总共四个 nwc_signup
空列中的第一个,这意味着一旦找到从第一列开始的空列,它就不会被插入到任何其他列中第四栏。
SET
rota.nwc_signup_1 = (CASE WHEN rota.nwc_signup_1 = ''
THEN ? ELSE rota.nwc_signup_1 END),
rota.nwc_signup_2 = (CASE WHEN (rota.nwc_signup_1 != '' AND
rota.nwc_signup_2 = '')
THEN ? ELSE rota.nwc_signup_2 END),
rota.nwc_signup_3 = (CASE WHEN (rota.nwc_signup_1 != '' AND
rota.nwc_signup_2 != '' AND
rota.nwc_signup_3 = '')
THEN ? ELSE rota.nwc_signup_3 END),
rota.nwc_signup_4 = (CASE WHEN (rota.nwc_signup_1 != '' AND
rota.nwc_signup_2 != '' AND
rota.nwc_signup_3 != '' AND
rota.nwc_signup_4 = '')
THEN ? ELSE rota.nwc_signup_4 END),
我正在尝试创建与我在下面使用 CASE 语句在 MYSQL 中使用简单的 if/else 语句演示的相同类型的逻辑。
基本上,如果第一个条件是正确的,那么我将放弃其余的。如果第一个没有,但第二个没有,则放弃其余部分等。
所以在这种情况下,我将从左到右填充数据库中的第一个空白列,意思是 "nwc_signup",如下所示。
if(rota.nwc_signup_1 = '') {
rota.nwc_signup_1 = ?
} else {
if(rota.nwc_signup_2 = '') {
rota.nwc_signup_2 = ?
} else {
if(rota.nwc_signup_3 = '') {
rota.nwc_signup_3 = ?
} else {
if(rota.nwc_signup_4 = '') {
rota.nwc_signup_4 = ?
}
}
}
}
我试过在 MYSQL 中使用 CASE 语句,但它会标记错误。有没有人有一个巧妙的想法来帮助我们将不胜感激。
UPDATE
`rota`
INNER JOIN `signups`
ON
signups.signups_user_id = rota.signups_user_id
INNER JOIN `pre_rota`
ON
pre_rota.signups_user_id = signups.signups_user_id
SET
CASE
WHEN rota.nwc_signup_1 = ''
THEN rota.nwc_signup_1 = ?
ELSE
CASE
WHEN rota.nwc_signup_2 = ''
THEN rota.nwc_signup_2 = ?
ELSE
END
END,
WHERE
pre_rota.nwc_username = 'jacktrow'
MYSQL 错误:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASE
WHEN rota.nwc_signup_1 = ''
THEN SET rota.nwc_si' at line 15
case
不能用在[=12=的左边,只能用在右边。您可以对每一列使用 case
:
SET rota.nwc_signup_1 = (CASE WHEN rota.nwc_signup_1 = '' THEN ? ELSE END),
rota.nwc_signup_2 = (CASE WHEN rota.nwc_signup_1 = '' THEN rota.nwc_signup_2
WHEN rota.nwc_signup_1 = '' THEN ?
ELSE rota.nwc_signup_2
END)
下面的 SQL 似乎工作得很好。数据将被插入到总共四个 nwc_signup
空列中的第一个,这意味着一旦找到从第一列开始的空列,它就不会被插入到任何其他列中第四栏。
SET
rota.nwc_signup_1 = (CASE WHEN rota.nwc_signup_1 = ''
THEN ? ELSE rota.nwc_signup_1 END),
rota.nwc_signup_2 = (CASE WHEN (rota.nwc_signup_1 != '' AND
rota.nwc_signup_2 = '')
THEN ? ELSE rota.nwc_signup_2 END),
rota.nwc_signup_3 = (CASE WHEN (rota.nwc_signup_1 != '' AND
rota.nwc_signup_2 != '' AND
rota.nwc_signup_3 = '')
THEN ? ELSE rota.nwc_signup_3 END),
rota.nwc_signup_4 = (CASE WHEN (rota.nwc_signup_1 != '' AND
rota.nwc_signup_2 != '' AND
rota.nwc_signup_3 != '' AND
rota.nwc_signup_4 = '')
THEN ? ELSE rota.nwc_signup_4 END),