0

尝试检查名称是否存在(在另一个表中)并在一个步骤中添加到插入查询。我发现如果提交的 empNum 不在用户数据库中,则查询错误:列'lastName'不能为空。可以在子查询中使用 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())
4

3 回答 3

1

您的子查询应该在括号中:

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

您可以通过许多其他方法来执行其他人已经提到的相同操作,但您的版本在添加必需的“()”后也可以使用。

于 2012-12-11T16:36:00.647 回答
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())
于 2012-12-11T16:09:37.580 回答
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()
于 2012-12-11T16:24:36.917 回答