2009-10-26 76 views
-2

這個問題我莫名其妙:MySQL的交易查詢幫助

BEGIN; 
INSERT INTO sub_users(user_id, email) 
SELECT user_id FROM users WHERE email='[email protected]', '$email'; 
COMMIT; 

通常情況下,我在交易多條語句,但我刪除那些清晰。

我得到這個錯誤:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your 
MySQL server version for the right syntax to use near ' '[email protected]'' at line 1 

我使用的MySQL版本5.1.36

+0

我可能要開始一個新的職位,因爲這一個似乎是混亂的每一個人。我只想從用戶表中選擇一個值,然後將$ email的用戶定義值插入到表sub_users中。 – Chad 2009-10-26 03:03:27

+0

不需要新帖子;請仔細閱讀答覆。 – ChssPly76 2009-10-26 03:11:04

回答

2

兩個問題你的說法:

  1. 你不選擇電子郵件插入(僅限ID)
  2. 您使用'='而不是IN條款。

應該是這樣的:

INSERT INTO sub_users(user_id, email) 
SELECT user_id, email FROM users 
    WHERE email IN ('[email protected]', '[email protected]'); 

代替。

更新(基於評論)

INSERT INTO sub_users(user_id, email) 
SELECT user_id, '[email protected]' FROM users 
    WHERE email = '[email protected]'; 
+0

我想插入的電子郵件位於我正在選擇的表格中。 – Chad 2009-10-26 02:27:28

+0

您正在從'用戶'中選擇。上述查詢將選擇'email'字段爲'[email protected]'或'[email protected]'的'users'中的所有記錄,並將這些記錄插入到'sub_users'中。如果你想做別的事情,請澄清你的問題 – ChssPly76 2009-10-26 02:30:57

+0

好的,我想用電子郵件[email protected]取得用戶的user_id,然後將其插入到sub_users表中,並附上一封新郵件([email protected] )。所以[email protected]將來自一個PHP變量,而不是數據庫。 – Chad 2009-10-26 02:34:11

2

您至少有兩個錯誤,我可以看到:

  1. 您正在試圖插入值數據(user_idemail的兩列),但僅從INSERT INTO ... SELECT的後半部分中選擇一列(user_id)。您必須在嘗試插入時選擇相同數量的列,然後排序。
  2. 您在SELECT的謂詞中有語法錯誤。我想你想使用:

    WHERE email IN ('[email protected]', '[email protected]')

或等值:

WHERE email = '[email protected]' 
    OR email = '[email protected]' 
+0

但是如果我想插入的第二個值不是來自select。那我該怎麼做? – Chad 2009-10-26 02:26:18

+0

我只需要用戶表中的user_id。 – Chad 2009-10-26 02:29:04

+0

@Chad,你可以做'INSERT INTO sub_users(user_id,email)SELECT user_id,'一些常量'FROM ...'。 ''一些常量'也可以是一個函數或從你選擇的表中的另一個字段。 – dcrosta 2009-10-26 02:46:51