1. ホーム
  2. mysql

[解決済み] IDを使用して複数のSQLテーブルを結合するにはどうすればよいですか?

2022-05-08 02:29:10

質問

4つの異なるテーブルがあり、結合したいのですが。テーブルは以下のようなカラムで構成されています。

TableA - aID | nameA | dID

TableB - bID | nameB | cID | aID

TableC - cID | nameC | date

TableD - dID | nameD

テーブルAから始めて、bがこれらのテーブルの主キーを持っているので、bを使用してテーブルaとcをJOINする方法を理解しています。テーブルAに対してテーブルDをJOINできるようにしたいのですが。以下は、最初にテーブルAとBを結合し、次にそれをCに結合する私のSQLステートメントです。

SELECT TableA.*, TableB.*, TableC.* FROM (TableB INNER JOIN TableA
ON TableB.aID= TableA.aID)
INNER JOIN TableC ON(TableB.cID= Tablec.cID)
WHERE (DATE(TableC.date)=date(now())) 

Dを含めるために別の結合を追加しようとすると、'TableD'が不明であるというエラーが発生します。

 SELECT TableA.*, TableB.*, TableC.*, TableD.* FROM (TableB INNER JOIN TableA
    ON TableB.aID= TableA.aID)
    INNER JOIN TableC ON(TableB.cID= Tablec.cID)
    INNER JOIN TableA ta ON(ta.dID= TableD.dID)
    WHERE (DATE(TableC.date)=date(now())) 

解決方法は?

もっとこうして欲しい。

SELECT TableA.*, TableB.*, TableC.*, TableD.*
FROM TableA
    JOIN TableB
        ON TableB.aID = TableA.aID
    JOIN TableC
        ON TableC.cID = TableB.cID
    JOIN TableD
        ON TableD.dID = TableA.dID
WHERE DATE(TableC.date)=date(now()) 

あなたの例では、実際には TableD . 先ほどと同じように、もう一度結合を実行すればよいのです。

注:多くの括弧を削除したことにお気づきでしょう。括弧はほとんどの場合不要であり、コードを読むときに混乱を招くだけだからです。適切なネストは、コードを読みやすくし、分離するための最良の方法です。