0

名前が (別のテーブルに) 存在するかどうかを確認し、1 つのステップで挿入クエリに追加しようとしています。送信された empNum がユーザー データベースにない場合、次のようなクエリ エラーが発生することがわかりました。サブクエリで 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

ケースを使用できます:

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 に答える
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 に答える