2011-10-19 11 views
1

私はこのような状況に遭遇しています。エントリーのない結合条件に必要なテーブルが1つあるため、LEFT JOINを使用する必要があります。 2つ以上の結合で使用されているときには、構文の周りを頭で囲むことはできません。MySQL LEFT RIGHT JOIN構文の流暢

私が持っているでしょう:

SELECT A.*, B.*, C.* 
FROM A, B, C 
WHERE A.id = C.id 
AND C.aid = A.id 
AND B.cid = C.id 

に沿ってDは、空である可能性が付属していますし、私は、クエリを書き直すと問題に実行する必要があります。

Dをこれらのテーブルのいずれかに単純に追加するにはどうすればよいですか?

+0

は私が見る誰かが私のjqueryのない作業、質問への道が見つかりましたhahaha –

答えて

1

私の助言は、FROM句に複数の列を決して指定しないことです。明確にするために

は、それは、常に良いでしょう:

  • 使用し
  • は、等号の左側に結合されたテーブルの列を指定するWHERE句に登録しよう
  • 使用エイリアス

例:

SELECT a.*, b.*, c.* 
FROM ATable a 
INNER JOIN BTable b 
    ON b.id = a.id 
INNER JOIN CTable c 
    ON c.id = a.id 
WHERE a.someColumn = 'something' 

わからないのMySQLについては、いくつかの他のSQLのフレーバーで、あなたは更新時に同じを使用することができると同様に、削除します。

DELETE FROM a 
FROM ATable a 
INNER JOIN BTable b 
    ON b.id = a.id 
INNER JOIN CTable c 
    ON c.id = a.id 
WHERE a.someColumn = 'something' 

または

UPDATE a 
SET something = newValue 
FROM ATable a 
INNER JOIN BTable b 
    ON b.id = a.id 
INNER JOIN CTable c 
    ON c.id = a.id 
WHERE a.someColumn = 'something' 
-1

・ホープこれはあなたが明示的なJOINのすべてを指定するオフはるかに優れている

SELECT 
A.*, B.*, C.* 
FROM A 
inner join C on(A.id = C.id) 
inner join B on(B.cid = C.id) 
5

をするのに役立ちます。それは事をもっとはっきりさせるはずです。

SELECT A.*, B.*, C.*, D.* 
    FROM A 
     INNER JOIN C 
      ON C.aid = A.id 
     INNER JOIN B 
      ON B.cid = C.id 
     LEFT JOIN D 
      ON C.did = d.id 
+1

+1 41秒で同じ答えに私を打つための+1 :) –

1

以下の構文が役立ちます。基本的な前提は、リストされているテーブルです。LEFTは必須です。右側のテーブル(別名)はオプションです。私はあなたがそれを理解していないと理解しています。構文サンプルには、A - > CとCから別のフィールドのAに戻るときに(批判するつもりはない)ことが示されています。これは...だから

select 
     Want.*, 
     Maybe.*, 
     SecondA.*, 
     B.* 
    From 
     A as Want 
     LEFT JOIN C as Maybe 
      on Want.ID = Maybe.ID 

      JOIN A as SecondA 
       on Maybe.AID = SecondA.ID 
      JOIN B 
       on Maybe.ID = B.cID 

2つのフィールドはAにポイントBOTHことを「C」の表のどこにいるか、あなたは第二の別名としてに再参加するだろう場合であれば、このクエリは、私が欲しい述べています表A(別名Want - リストの左辺/最初の表)IDキーが一致する表C(別名Maybe)に一致するかどうかにかかわらず。

"C"から "A"とテーブルBの2番目のインスタンスに戻ってくる次の結合に注目してください。これらの結合はちょうど結合であるので... "Maybe"エイリアスと2番目のエイリアスの関係"A"と "B"のインスタンスはJOIN(必須)です。

これは、それがどのように機能するかについていくつかのより良い説明を与えることを望みます。

今、あなたの実際のクエリです。あなたが探しているもの、そしてあなたのサンプルテーブル構造/結果expectionsを記述することができれば、それはより明示的なソリューションをあなたのニーズに提供することができます。