我有一张表格,其中包含用户列表以及他们被允许访问的应用程序。该表的每一行都有一个用户ID和应用程序ID列,还有其他一些内容,只要存在这样的一行,每个用户就可以访问该应用程序。
我已经有了一些能够访问特定应用程序的用户,但我想知道哪些用户没有访问特定应用程序,并通过为每个这样的用户创建表中的行来给他们访问这个应用程序的权限。
它将类似于这样:
当我执行以上查询时,我遇到了“#1242 - 子查询返回多行”错误。
我在Google上搜索了这个错误,但是得到的结果有一些问题比这个更加复杂,所以我无法理解我想要的内容。
请告诉我如何进行这样的操作?
谢谢!
更新:我可以这样做:
但是这种方法在这种情况下行不通,因为一些用户可以访问多个应用程序,在表中有多行与他们的 id 相关。如果按照上述方式查询,我将再次给相同的人授予对同一应用程序的访问权限。
例如:用户 3 可以访问应用程序 3 和应用程序 4,这意味着 user_app_map 包含两行,其中 user_id 为 3,app_id 分别为 3 和 4。使用上述查询,我会从第二行获取 user_id,并再次创建另一行,这将是第一行不必要的重复。
我已经有了一些能够访问特定应用程序的用户,但我想知道哪些用户没有访问特定应用程序,并通过为每个这样的用户创建表中的行来给他们访问这个应用程序的权限。
它将类似于这样:
SET @v1 := (SELECT user_id from user_app_map WHERE app_id != <app_id_here> );
INSERT INTO user_app_map (user_id, app_id) VALUES (
(SELECT @v1), <app_id_here> );
当我执行以上查询时,我遇到了“#1242 - 子查询返回多行”错误。
我在Google上搜索了这个错误,但是得到的结果有一些问题比这个更加复杂,所以我无法理解我想要的内容。
请告诉我如何进行这样的操作?
谢谢!
更新:我可以这样做:
INSERT INTO user_app_map (user_id, app_id)
SELECT user_id, <app_id_here> from user_app_map WHERE app_id != <app_id_here>
但是这种方法在这种情况下行不通,因为一些用户可以访问多个应用程序,在表中有多行与他们的 id 相关。如果按照上述方式查询,我将再次给相同的人授予对同一应用程序的访问权限。
例如:用户 3 可以访问应用程序 3 和应用程序 4,这意味着 user_app_map 包含两行,其中 user_id 为 3,app_id 分别为 3 和 4。使用上述查询,我会从第二行获取 user_id,并再次创建另一行,这将是第一行不必要的重复。
DISTINCT
- 请参见底部编辑的查询。 - Bohemian