Table1からTable 2に2つの列を結合する
質問
table1の列をtable 2の2つの列にどのように参照しますか
50個の正確な行を持つテーブル「 State 」を作成しました
「 Wedding 」テーブルでの関連付け(weddingState、contactState)の試行
これは私が作成したステートメントですが、トップ WeddingState に正しく結合するだけです-その下の内部結合は気にしないようです...
選択*
結婚式から
INNER JOINは、結婚式でs1と表示します。 WeddingState = s1.StateId //結婚の状態
INNER JOINは、s2 ON weddings.ContactState = s2.StateId //花嫁の連絡先の状態として記載します
WHERE weddings.weddingid =" 094829292"
解決
これらをPHPなどで取得していて、フィールド名をキーとするハッシュ配列で行をフェッチしていると思います。もちろん、特定のキーを持つハッシュには1つの要素しか存在できません。そのため、列のエイリアスを使用して、同じ名前の列に明確なエイリアスを割り当てる必要があります。
SELECT w.*, s1.StateID AS wstate, s2.StateId AS cstate
FROM weddings AS w
INNER JOIN states AS s1 ON w.WeddingState = s1.StateId //state of marriage
INNER JOIN states AS s2 ON w.ContactState = s2.StateId //contact state of bride
WHERE w.weddingid="094829292";
これで、ハッシュ配列にキー" wstate"が追加されます。および「cstate」。これらの列にエイリアスを設定しないと、一方が常に他方を上書きします。
他のヒント
そして、あなたが結論に導く結果に対して何を得ていますか?
2つの結合のフィールド名と、プライマリテーブルのフィールド名の一部が同一であるため、スターターにとって混乱を招きます。出力列を明示的に選択し、意味のあるエイリアスを指定することは非常に良い考えです。
方法:
SELECT s1.StateName、s2.StateName
結婚式から
INNER JOINは、s1 ON weddings.WeddingState = s1.StateId //婚state状態
INNER JOINは、s2 ON weddings.ContactState = s2.StateId //花嫁の連絡先の状態として記載します
WHERE weddings.weddingid =" 094829292"
ビルに感謝、StateNameも追加しました
SELECT w。*、
s1.StateId AS WeddingStateId,
s1.StateName AS WeddingStateName,
s2.StateId AS ContactStateId,
s2.StateName AS ContactStateName
ウエディングASからw
内部結合は、w.WeddingState = s1.StateIdとしてs1としてASを宣言します
INNER JOINは、s.2でASを示しますw.ContactState = s2.StateId