3つの異なるテーブルの1つに存在する1つの一意のID値をクエリしようとしています。
3つのテーブルには、主キーIDの階層化されたセットがあります。
t1 = 1-9
t2 = 10-19
t3 = 20-29
これらのテーブルはoptgroup
メニューの一部であり、PKが選択値として使用されます。これは複数選択であるため、ユーザーは最大3つの値を選択できます。これらはすべて、これらのテーブルの1つから、またはそれぞれから1つ取得できます。
value1
各選択は、ターゲットテーブルなどvalue2
の個別の列に格納されます。value3
1つの値のみが渡される場合、他の列はNULL
です。
私の問題—生データのCSVファイルが一時テーブルにダンプされています。一時テーブルの各行には、これらの値を表す3つの既存の列がありますが、これらは現在、3つのテーブルにもある文字列値であり、ではありませんid
。このデータは、アプリで動作する適切なFKを使用して別のテーブル設定に挿入する必要があります。
id
既存の3つのテーブルをクエリして、3つのテーブルのいずれかに一致する特定の文字列の値を探し、同じクエリで、一時テーブルの残りの「値」列に対してさらに2回クエリを実行するにはどうすればよいですか。行?
編集
明確化のためのその他のサンプルデータ:
一時テーブルからのデータ:
temp
+---------+---------+---------+--------+
| value1 | value2 | value3 | user |
+---------+---------+---------+--------+
| primary | light | red | greg |
| red | blue | NULL | sarah |
| neutral | orange | green | tim |
| dark | blue | green | laura |
+---------+---------+---------+--------+
別のテーブルに挿入する必要があります。列のIDは、次のvalueX
3つのテーブルにまたがって存在します。
table 1
+---------+---------+
| id | name |
+---------+---------+
| 003 | neutral |
| 004 | dark |
| 005 | light |
+---------+---------+
table 2
+---------+---------+
| id | name |
+---------+---------+
| 010 | blue |
| 011 | orange |
| 012 | red |
| 013 | green |
+---------+---------+
table 3
+---------+---------------+
| id | name |
+---------+---------------+
| 020 | primary |
| 021 | complimentary |
| 022 | secondary |
+---------+---------------+
一時テーブルの他の列(user
この例では)は挿入の一部であり、次のようにターゲットテーブルにデータを入力します。
target
+---------+---------+---------+-------+
| value1 | value2 | value3 | user |
+---------+---------+---------+-------+
| 020 | 005 | 012 | greg |
| 012 | 010 | NULL | sarah |
| 003 | 011 | 013 | tim |
| 004 | 010 | 013 | laura |
+---------+---------+---------+-------+
私の最も近い試みは値の最初の列を取得することですが、同じクエリで他の2つを取得する方法に迷っています。
INSERT INTO target (user, value1, value2, value3)
SELECT t.user, a.id, X, X
FROM temp t,
(SELECT * FROM table1
UNION
SELECT * FROM table2
UNION
SELECT * FROM table3) as a
WHERE a.name = t.value1
AND X = t.value2
AND X = t.value3
Xを解こうとしています。私はここで自分の要素からかなり外れていますが、これは私が達成しようとしていることを説明することに近いです。