0

我有以下 SQL 查询。它选择属于多个组的用户。每个组对程序具有不同或可能相同的权限。

SELECT app_name, priv_access, priv_insert, priv_delete, priv_update, priv_export, priv_print 
FROM news_sec_groups_apps 
WHERE group_id IN (SELECT group_id 
                   FROM news_sec_users_groups 
                   WHERE login = 'test2')

我想要完成的是创建一个包含一行的数组,显示每个组访问的最大值。例如,如果一个组可以访问 priv_access 和 priv_export,而另一个组可以访问 priv_delete。我想要一条记录,其中 app_name、priv_access、priv_delete 和 priv_export 都显示 Y,其他项目为 null 或 No。

'form_imsi_news', 'Y', '', '', '', 'Y', ''
'form_imsi_news', NULL, NULL, Y, NULL, NULL, NULL

应该像这样出来:'form_imsi_news', 'Y', '', 'Y', '', 'Y', ''

请任何帮助将不胜感激。

4

1 回答 1

1

我认为您想按以下方式对结果进行分组app_name

SELECT app_name, max(priv_access), max(priv_insert), max(priv_delete),
       max(priv_update), max(priv_export), max(priv_print)
FROM news_sec_groups_apps 
WHERE group_id IN (SELECT group_id 
                   FROM news_sec_users_groups 
                   WHERE login = 'test2')
group by app_name

我认为这将直接起作用,因为 'Y' > 'N' > '' 和 NULL 被忽略。

于 2013-04-29T21:16:55.837 回答