case 语句选项拆分在两个输出列上
case statement options splitted on two output columns
我有一个 table,其中包含我网站的功能列表。假设它有三列:
id_usr - url - landing_page
1 a.php a.html
2 b.php b.html
3 c.php c.html
4 d.php d.html
然后我有一个 table 对于每个用户我有他可以显示的那些功能:
id_usr - func
1 1
1 3
这个查询(来自)
SELECT f.id, CASE WHEN id_user IS NOT NULL THEN url ELSE landing_page END
FROM funzioni f
LEFT JOIN funz_abilitate fa ON fa.id_funzione = f.id AND fa.id_user = $id
正在返回预期的内容,但 CASE 语句中的两个选项在一列中返回。是否可以将它们分成两列(第一列用于案例 url,第二列用于案例 landing_page)?
预期的输出是这样的
id_usr - case url - case landing_page
1 a.php NULL
2 NULL b.html
3 c.php NULL
4 d.php NULL
而实际上它 returns:
id_usr - case
1 a.php
2 b.html
3 c.php
4 d.php
您需要 2 个 CASE 表达式:
SELECT f.id,
CASE WHEN id_user IS NOT NULL THEN url END url,
CASE WHEN id_user IS NULL THEN landing_page END landing_page
FROM funzioni f
LEFT JOIN funz_abilitate fa ON fa.id_funzione = f.id AND fa.id_user = $id
此外,您必须使用 table 的 name/alias 限定所有列名以避免歧义。
我有一个 table,其中包含我网站的功能列表。假设它有三列:
id_usr - url - landing_page
1 a.php a.html
2 b.php b.html
3 c.php c.html
4 d.php d.html
然后我有一个 table 对于每个用户我有他可以显示的那些功能:
id_usr - func
1 1
1 3
这个查询(来自
SELECT f.id, CASE WHEN id_user IS NOT NULL THEN url ELSE landing_page END
FROM funzioni f
LEFT JOIN funz_abilitate fa ON fa.id_funzione = f.id AND fa.id_user = $id
正在返回预期的内容,但 CASE 语句中的两个选项在一列中返回。是否可以将它们分成两列(第一列用于案例 url,第二列用于案例 landing_page)?
预期的输出是这样的
id_usr - case url - case landing_page
1 a.php NULL
2 NULL b.html
3 c.php NULL
4 d.php NULL
而实际上它 returns:
id_usr - case
1 a.php
2 b.html
3 c.php
4 d.php
您需要 2 个 CASE 表达式:
SELECT f.id,
CASE WHEN id_user IS NOT NULL THEN url END url,
CASE WHEN id_user IS NULL THEN landing_page END landing_page
FROM funzioni f
LEFT JOIN funz_abilitate fa ON fa.id_funzione = f.id AND fa.id_user = $id
此外,您必须使用 table 的 name/alias 限定所有列名以避免歧义。