ある値から別の値を選択することにより、以前の関係のない 2 つのテーブルをリンクしたいと考えています。
だから私のテーブルは次のとおりです。
コード:
ID | ラベル |
---|---|
1 | 1 |
2 | 1 |
3 | 1 |
4 | 2 |
5 | 2 |
人々:
ID | タイプ | code_id |
---|---|---|
1 | 2 | バツ |
2 | 2 | バツ |
3 | 7 | バツ |
people
テーブルから値を選んでテーブルを更新したいcodes
。からのアイテムpeople
に条件がある場合は常に、からlabel=2
別の ID を選択する必要がありますcodes
。「コード」には「人」にいる人よりも多くのコードがあるため、すべての人が異なるコードを持つことができます。
たとえば、結果は次のようになります。
ID | タイプ | code_id | 説明 |
---|---|---|---|
1 | 2 | 4 | コード テーブルの 1 つの値で更新 |
2 | 2 | 5 | コード表の別の値で更新 |
3 | 7 | バツ | 以来、更新されていませんtype<>2 |
WHERE
このように INNER JOIN を使用してみましたが、フィルターを使用すると機能しません。
UPDATE people A
INNER JOIN
(SELECT id FROM codes WHERE label=2) B
USING (id)
SET A.code_id=B.id
WHERE A.type=2;
私は何を間違っていますか?
次のデータでテストするSQL Fiddleを用意しました。
CREATE TABLE codes (id int auto_increment primary key, label int);
CREATE TABLE people (id int auto_increment primary key, type int, code_id int);
INSERT INTO codes VALUES (1,1),(2,1),(3,1),(4,2),(5,2);
INSERT INTO people (id,type) VALUES (1,2),(2,2),(3,7);