私はこの声明を持っています:
INSERT INTO qa_costpriceslog (item_code, invoice_code, item_costprice)
VALUES (1, 2, (SELECT item_costprice FROM qa_items WHERE item_code = 1));
Item_costpriceの同じデータをコピーして値を挿入しようとしていますが、エラーが表示されます。
Error Code: 1136. Column count doesn't match value count at row 1
これをどのように解決できますか?
SELECT
ステートメント内でエイリアスを持つ数値リテラルを使用します。 SELECT
コンポーネントの周りに()
は必要ありません。
INSERT INTO qa_costpriceslog (item_code, invoice_code, item_costprice)
SELECT
/* Literal number values with column aliases */
1 AS item_code,
2 AS invoice_code,
item_costprice
FROM qa_items
WHERE item_code = 1;
INSERT INTO...SELECT
のコンテキストでは、エイリアスは実際には必要なく、SELECT 1, 2, item_costprice
だけでよいことに注意してください。ただし、通常のSELECT
では、返される列にアクセスするためにエイリアスが必要です。
あなたは単に例えば.
INSERT INTO modulesToSections (fk_moduleId, fk_sectionId, `order`) VALUES
((SELECT id FROM modules WHERE title="Top bar"),0,-100);
挿入ステートメントの左側の列が多すぎるか、右側の列が不足しています。 VALUESの前の部分には7つの列がリストされていますが、VALUESの後の2番目の部分には3つの列しか返されません:1、2の場合、サブクエリは1つの列のみを返します。
編集:さて、誰かがクエリを変更する前に...
「すべてか無か」という答えに失望しました。 (もう一度)INSERT
いくつかのデータとSELECT
と既存のテーブルからのid
が必要でした。
INSERT INTO table1 (id_table2, name) VALUES ((SELECT id FROM table2 LIMIT 1), 'Example');
INSERT
クエリの副選択では、区切り文字としてコンマに加えて括弧を使用する必要があります。
SELECT
内でINSERT
を使用することに問題がある場合は、最初にSELECT
を個別にテストし、両方のクエリで正しい列数が一致することを確認することをお勧めします。