我有一張表,其中包含用戶列表以及他們被允許訪問的應用程序。此表中的每行都有一列user_id和app_id以及其他一些內容,並且存在這樣的行足以讓每個用戶都能夠訪問該應用程序。子查詢在mysql中返回多個行錯誤
我有一些用戶可以訪問某個特定的應用程序,但我希望看到哪些用戶無法訪問特定的應用程序,並通過爲每個此類用戶在表中創建行來授予他們對此應用程序的訪問權限。
這將是這樣的:
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 - Subquery returns more than 1 row
錯誤。
我在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,並再次創建另一行,這將成爲第一行不必要的重複。
是的,它確實返回多行。如何在不使用變量的情況下做同樣的事情? –
@ForbiddenOverseer請參閱編輯aswer – Bohemian
最後一個查詢似乎有問題... VALUES後面的圓括號應該結束? –