'Is is possible to use an IF in mysql subquery?
Trying to check if a name exists (in another table) and add to insert query in one step. I've discovered if the submitted empNum isn't in the User database, the query errors with: Column 'lastName' cannot be null. Can an if statement be used in the subquery something like below?
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())
Solution 1:[1]
In this scenario, your best bet is to use the COALESCE operator.
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())
The IF function could be used, but it would be much more verbose:
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())
Solution 2:[2]
you could use a case:
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()
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | |
| Solution 2 | Julien May |
