[解決済み】FROM句で更新対象のテーブルを指定できない
2022-03-24 16:28:59
質問
簡単なmysqlのテーブルがあります。
CREATE TABLE IF NOT EXISTS `pers` (
`persID` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(35) NOT NULL,
`gehalt` int(11) NOT NULL,
`chefID` int(11) DEFAULT NULL,
PRIMARY KEY (`persID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
INSERT INTO `pers` (`persID`, `name`, `gehalt`, `chefID`) VALUES
(1, 'blb', 1000, 3),
(2, 'as', 1000, 3),
(3, 'chef', 1040, NULL);
以下のアップデートを実行しようとしましたが、エラー1093だけが表示されます。
UPDATE pers P
SET P.gehalt = P.gehalt * 1.05
WHERE (P.chefID IS NOT NULL
OR gehalt <
(SELECT (
SELECT MAX(gehalt * 1.05)
FROM pers MA
WHERE MA.chefID = MA.chefID)
AS _pers
))
このエラーを検索したところ、mysqlから以下のようなページが見つかりました。 http://dev.mysql.com/doc/refman/5.1/en/subquery-restrictions.html しかし、それは私を助けることはありません。
SQLクエリを修正するにはどうすればよいですか?
どのように解決するのですか?
問題は、MySQL では、なぜかこのようなクエリを書くことができないことです。
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM myTable
INNER JOIN ...
)
つまり、もしあなたが
UPDATE
/
INSERT
/
DELETE
を使用する場合、内側のクエリでそのテーブルを参照することはできません。
(あなたが
できる
しかし、その外側のテーブルからフィールドを参照する...)
のインスタンスを置き換えることで解決します。
myTable
をサブクエリに追加します。
(SELECT * FROM myTable)
は、このように
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM (SELECT * FROM myTable) AS something
INNER JOIN ...
)
これはどうやら必要なフィールドが暗黙のうちにテンポラリーテーブルにコピーされるようなので、許可されるようです。
こんな解決策を見つけました。 ここで . その記事からのメモです。
だけではダメなんです。
SELECT * FROM table
をサブクエリに追加してください。実際には、一番内側のクエリで必要なカラムだけを選択し、そのカラムに適切なWHERE
節で結果を制限することもできます。
関連
-
[解決済み】MySQL エラー 1093 - FROM 句で更新のターゲット テーブルを指定できません。
-
[解決済み] varchar 値 'simple, ' をデータ型 int に変換する際に変換に失敗しました。
-
[解決済み】データベースへの「ネイティブ」SQL接続を使用するとはどういう意味ですか?
-
[解決済み】SQL Server: 無効なカラム名
-
[解決済み] エラー (ORA-00923: 期待された場所に FROM キーワードが見つかりませんでした)
-
[解決済み] Oracle(LiveSQL)のSQL [重複]について
-
[解決済み] SQLです。最初の出現箇所のみを返す
-
[解決済み] nvarchar 値 ... をデータ型 int に変換する際に、変換に失敗しました。
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] MySQLテーブルへの挿入または存在する場合の更新
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】MySQL エラー 1093 - FROM 句で更新のターゲット テーブルを指定できません。
-
[解決済み] テーブルのFROM句の項目がない [終了しました] 。
-
[解決済み】2つの列を分割する方法は?
-
[解決済み】Postgresのエラー。式として使用されるサブクエリによって返される複数の行
-
[解決済み】SQL Server サブクエリが1つ以上の値を返しました。サブクエリが =, !=, <, <= , >, >= に続く場合、これは許可されません。
-
[解決済み] ORA-12801: 並列クエリサーバー P004 および ORA-01555 でシグナルされたエラー: スナップショットが古すぎる。
-
[解決済み] DELETE文の競合REFERENCE制約
-
[解決済み] ORA-01779: キーが保存されていないテーブルにマップされる列を変更できません。
-
[解決済み] 時間を時間単位や10分単位でグループ化する方法
-
[解決済み] SQLテーブルで重複する値を検索する