0

私は次のクエリを受け取りました:

INSERT INTO contracts_settings (contract_id, setting_id, setting_value)
VALUES (:contract_id, (
    SELECT  setting_id
    FROM    settings
    WHERE   setting_type = :setting_type
        AND setting_name = :setting_name
    LIMIT   1
), :setting_value)
ON DUPLICATE KEY UPDATE setting_value = :setting_value

プレフィックス:が付いた値は、PHPを使用してデータに置き換えられますPDO::bindBalue

内部クエリが何も見つからない場合(NULLを返す場合)、NULLステートメントもINSERTします。それを回避する方法は?

ありがとう。

4

1 に答える 1

2

INSERT ... VALUES構文を次のように変換しますINSERT ... SELECT

INSERT INTO contracts_settings 
  (contract_id, setting_id, setting_value)
SELECT 
    :contract_id,
    setting_id,
    :setting_value
FROM  settings
WHERE setting_type = :setting_type
  AND setting_name = :setting_name
LIMIT   1

ON DUPLICATE KEY UPDATE 
    setting_value = :setting_value ;
于 2013-01-28T19:55:52.327 に答える