1

MySQLテーブルから値(id)を選択し、それを更新ステートメントで使用しようとしています-すべてMySQLクエリで。selectは2つの部分で構成されています。idが存在する場合は返されます。そうでない場合は、2回の挿入が行われ、IDが返されます。

私は次のクエリを持っています:

SELECT 
    (CASE a.id WHEN '' THEN (
        DELIMITER //
        INSERT INTO xxxx (item_id, date_created, date_modified) VALUES (3313, NOW(), NOW())//
        INSERT INTO yyyy (item_id, locale_id, value, date_created, date_modified) VALUES(LAST_INSERT_ID(), 2, TRIM(SUBSTRING_INDEX('some text: 250 x 46 x 584', ':', 1)), NOW(), NOW())//
        SELECT c.id FROM xxxx c JOIN yyyy d WHERE c.item_id=3313 AND d.value='some text' LIMIT 1
    ) ELSE a.id END
) AS trans_ref_id
FROM xxxx a JOIN yyyy b ON a.id = b.item_id
WHERE b.value='some text'

実行すると、次のエラーが発生します。

SQLエラー(1064):SQL構文にエラーがあります。2行目の')ELSE a.id END)as trans_ref_id FROM xxxx'の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

私はここで間違ったアプローチをしていますか?このエラーはどこから来ていますか?

4

2 に答える 2

0

これを SQL で行うことはできません。カーソルを使用する必要があります。マニュアルには、あなたが見るための例があります。おそらく、これをストアド プロシージャに入れるのが最善です。

于 2012-12-03T10:27:50.863 に答える
0

あなたの創造的な試みは、次のようなSELECT+INSERT 構文に準拠していません:

INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    SELECT ...
    [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
于 2012-12-03T10:28:26.833 に答える