2011-02-09 16 views
1

私は、別のテーブルを追加する必要があると私は合っているいくつかのテーブルがあり、私は正しいクエリを取得するように見えることはできません。ここで私は今持っているものである -MySQL:複数のテーブルでの複数列の結合

表2
makeid、makename

表3
modelid、MODELNAME

caryear

表1
carid、CATID、makeid、modelid、表4
catid、catname

私はこれらを結合するために使用していたクエリは次のとおりです。

SELECT * FROM table1 a 
    JOIN table2 b on a.makeid=b.makeid 
    JOIN table3 c on a.modelid=c.modelid 
    JOIN table4 d on a.catid=d.catid 
    WHERE a.carid = $carid; 

は今、私は私が私の既存のクエリに追加することに苦労していますサードパーティから取得しています5番目のテーブルを追加する必要があります。新しいテーブルは、これらのフィールドがある -

表5 ID、今年、作る、モデル、citympg、hwympgを

私はcitympgとhwympg表1からcaryearに基づいて、表2からmakename、およびモデル名からを必要としますテーブル3私はそれらの値で2番目のクエリを行うことができます知っているが、私は単一のクエリを行い、すべてのデータを1つの行にすることを好むだろう。単一のクエリでこれを行うことはできますか?もしそうなら、どうですか?

答えて

2

これ以上の条件を満たすことは可能です。 これは機能しますか?

SELECT a.*, e.citympg, e.hwympg 
FROM table1 a 
    JOIN table2 b on a.makeid=b.makeid 
    JOIN table3 c on a.modelid=c.modelid 
    JOIN table4 d on a.catid=d.catid 
    Join table5 e on b.makename = e.make 
       and c.modelname = e.model 
       and a.caryear = e.year 
    WHERE a.carid = $carid; 

...あなたの質問は明らかではありませんが、 他にテーブル5に参加したいのですか、それともテーブル5でやりたかったことがありましたか?

+0

@ジム・ギャリソン:おっと、それは今修正されたと思う。 – FrustratedWithFormsDesigner

+1

私はフラストレーションが、a.citympg = e.citympgとa.hwympg = e.hwympgの代わりに 'a.caryear = e.year'を意味したと考えます。 –

+0

@ypercube:er、yeah、... ! – FrustratedWithFormsDesigner

1

索引がない、それは効率的ではありませんが、あなたは

LEFT JOIN table5 ON (table2.make = table5.make AND table3.model = table5.model AND table1.caryear = table5.caryear) 

を行うことができますまた、これはメイクやモデルを想定し、年間の文字列が正確に一致します。

+1

同意してくださいその名前が「エスコート」、「エスコート」が「エスコート」、「エスコート」(最後がスペース)の3つの場合は問題があります。比較のために、空白をトリムして大文字または小文字に変換することができます。 – Don

+0

メイクとモデルはすべてドロップダウン選択として表示され、それらはテーブルに挿入される前に正規化されているので、マッチングの問題を最小限に抑えるのに役立ちます。 –

関連する問題