3番目のIDに基づいて2つのテーブルをマージすることについて、同様の投稿が多数見つかりましたが、ロジックを解決できないようです。mysqlは3番目のIDに基づく2つのテーブルのビューを作成します
付け 3つのテーブル
tableA
| uuid | ttl | ord |
-----------------------
| alpha| Alp | 1|
| beta| Bet | 2|
| gamma| Gam | 3|
tableB
| uuid | ttl | ord | tab_A_ref
--------------------------------
| joe | Jo | 1| alpha
| mike | Mi | 2| beta
| peter| Pe | 3| alpha
| alan | Pe | 4| beta
| tom | Pe | 5| gamma
tableC
| uuid | ttl | ord | tab_A_ref
--------------------------------
| jane | Ja | 1| alpha
| marg | Ma | 2| beta
| phobe | Ph | 3| alpha
| anon | An | 4| beta
| toni | To | 5| gamma
私は2
SELECT
tableB.uuid, tableB.ttl, tableB.ord, tableB.tab_A_ref,
tableC.uuid, tableC.ttl, tableC.ord, tableC.tab_A_ref,
FROM
tableB INNER JOIN tableA on tableB.tab_A_ref = tableA.uuid,
tableC INNER JOIN tableA on tableC.tab_A_ref = tableA.uuid
をマージするためのロジックを拡張それが発生し、ビューの基本は、結合を使用して myView
tab_A_ref = alpha or beta
| uuid | ttl | ord | tab_A_ref
| joe | Jo | 1| alpha
| peter | Pe | 3| alpha
| jane | Ja | 1| alpha
| phobe | Ph | 3| alpha
| mike | Mi | 2| beta
| alan | Pe | 4| beta
| marg | Ma | 2| beta
| anon | An | 4| beta
を作成するために
SELECT
tableB.uuid, tableB.ttl, tableB.ord, tableB.tab_A_ref
FROM tableB
INNER JOIN tableA on tableB.tab_A_ref = tableA.uuid
を探していますエラーnot unique table/alias: tableA
他の投稿からは、入れ子になっている必要があります。bracketed
JOIN、多数の組み合わせを試してみました。では、どのようにフォーマットするのですか?JOIN
?
あなたは誤って 'JOIN'を使用しています。最後の行は' INNER JOIN tableC ON ... 'でなければならず、カンマはあらかじめ – RealCheeseLord
のデータ構造がひどく非正規化されています。なぜテーブルBとCは同じフィールドを持っていますか?確かに彼らは1つのテーブルになるはずですか?それらが同じであるがプロパティが少し異なる場合(例えば、男性の名前と女性の名前があるように見える場合)、区別をつけるための余分な列があればよいでしょう。 – ADyson
tableBとtableCのすべての行がtableBにちょうど入っていた場合、クエリは(アルファベット/ベータの制限を含む)単純に 'SELECT tableB.uuid、tableB.ttl、tableB.ord、tableB.tab_A_ref FROM tableB INNER JOIN tableA on tableB.tab_A_ref = tableA.uuid tableA.uuid in( 'アルファ'、 'ベータ') ' – ADyson