case语句选项分为两个输出列

问题描述 投票:0回答:1

我有一个表,其中列出了我网站的功能。说它有三列:

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

然后我有一个表,其中每个用户都有他可以显示的功能:

id_usr - func
1         1
1         3

此查询(来自this question of mine

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

实际上返回时:

id_usr - case
    1    a.php
    2    b.html
    3    c.php
    4    d.php
mysql join select mysql-5.7
1个回答
1
投票
您需要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

此外,您还必须使用表的名称/别名来限定所有列名,以避免产生歧义。
© www.soinside.com 2019 - 2024. All rights reserved.