2014-09-26 45 views
0

我在運行下面的查詢時遇到以下錯誤。有人可以幫助解決這個問題,或者我可以重寫嗎?我試圖插入多個記錄,其中每個與[email protected]關聯的database_id都使用[email protected]的user_ID。是否有人可以在插入語句時支持下面的錯誤

"Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression."

Insert into USER_DATABASE 
    (
    USER_ID, 
    DATABASE_ID 
    ) 
VALUES  ((SELECT USER_ID 
      FROM USERS 
      WHERE USER_NAME = '[email protected]'), 
      (SELECT DISTINCT DATABASE_ID 
      FROM USER_DATABASE 
      WHERE USER_ID = (SELECT USER_ID 
           FROM USERS 
           WHERE USER_NAME = '[email protected]'))) 

預先感謝幫助,您可以提供。

歡呼聲, 羅蘭

+1

你肯定只有一個與「[email protected]」的用戶名用戶ID? – Arun 2014-09-26 18:09:58

+0

你的sql可以做更簡單的自我加入。但是,您可以通過用'USER_ID in'替換USER_ID ='來修復錯誤 – paqogomez 2014-09-26 18:20:51

回答

0

這些2個查詢來返回多1行導致錯誤。運行它們單獨找到其中的問題是:

(SELECT USER_ID FROM USERS WHERE USER_NAME = '[email protected]') 

(SELECT DISTINCT DATABASE_ID 
      FROM USER_DATABASE 
      WHERE USER_ID = (SELECT USER_ID 
           FROM USERS 
           WHERE USER_NAME = '[email protected]') 

正確的查詢是:

Insert into USER_DATABASE 
    (
    USER_ID, 
    DATABASE_ID 
    ) 
SELECT DISTINCT (SELECT USER_ID 
      FROM USERS 
      WHERE USER_NAME = '[email protected]'), DATABASE_ID 
      FROM USER_DATABASE 
WHERE USER_DATABASE.USER_ID = (SELECT USER_ID 
           FROM USERS 
           WHERE USER_NAME = '[email protected]') 

假設你需要不同的用戶ID [email protected],X @ ABC.com

0

正如錯誤所述

您的子查詢返回多個值。

您可以通過單獨運行內部查詢輕鬆找到。

我想你想是這樣的:

對於SQL Server

Insert into USER_DATABASE (USER_ID, DATABASE_ID) 
VALUES ((SELECT TOP 1 USER_ID 
     FROM USERS 
     WHERE USER_NAME = '[email protected]'), 
     (SELECT DISTINCT TOP 1 DATABASE_ID 
     FROM USER_DATABASE 
     WHERE USER_ID IN (SELECT USER_ID 
          FROM USERS 
          WHERE USER_NAME = '[email protected]')))