2012-12-11 114 views
0

嘗試檢查名稱是否存在(在另一個表中)並添加到一步插入查詢。我發現如果提交的empNum不在用戶數據庫中,查詢錯誤:列'lastName'不能爲空。 if語句是否可以在子查詢中使用,如下所示?可以在mysql子查詢中使用IF嗎?

INSERT INTO Password_Reset (empNum, lastName, fromIP, dateReset) 
    VALUES (34567, 
    IF(SELECT COUNT(*) FROM User WHERE empNum = 34567, SELECT lastName FROM User WHERE empNum = 34567, '---'), 
    '192.168.1.1', 
    NOW()) 

回答

1

你的子查詢應該在括號:

IF((SELECT COUNT(*) FROM User WHERE empNum = 34567), 
    (SELECT lastName FROM User WHERE empNum = 34567), 
'---'), 

還有很多其他方法可以像其他人一樣提到,但是在添加必需的「()」後,您的版本也可以工作。

+0

這是我正在尋找的答案。 – David

0

在這種情況下,您最好的選擇是使用COALESCE運算符。

INSERT INTO Password_Reset (empNum, lastName, fromIP, dateReset) 
    VALUES (34567, 
    COALESCE((SELECT COUNT(*) FROM User WHERE empNum = 34567, SELECT lastName FROM User WHERE empNum = 34567), '---'), 
    '192.168.1.1', 
    NOW()) 

IF功能可以使用,但它會更加詳細:

INSERT INTO Password_Reset (empNum, lastName, fromIP, dateReset) 
    VALUES (34567, 
    IF((SELECT COUNT(*) FROM User WHERE empNum = 34567, SELECT lastName FROM User WHERE empNum = 34567) IS NOT NULL, (SELECT COUNT(*) FROM User WHERE empNum = 34567, SELECT lastName FROM User WHERE empNum = 34567), '---'), 
    '192.168.1.1', 
    NOW()) 
+0

COALESCE在''SELECT lastName FROM ...''返回語法錯誤' – David

0

你可以使用一個案例:

INSERT INTO Password_Reset (empNum, lastName, fromIP, dateReset) 
SELECT 
    34567, 
    CASE (EXISTS (SELECT * FROM User WHERE empNum = 34567)) 
     WHEN 1 THEN (SELECT lastName FROM User WHERE empNum = 34567) 
     ELSE '---' 
    END, 
    '192.168.1.1', 
    NOW() 
+0

不錯的建議。知道替代品是很好的。 – David

相關問題