2017-08-18 16 views
0

私自身のデータベースではありません。私はそれからいくつかの特定のデータを抽出する必要がありますが、私は複数のクエリやコード内の結果セットをループすることなく、データを取得する方法を私の頭を浮かべて苦労している。私は他の質問を見回しましたが、それほど遠くには到達できませんでした。MySQL - FKで複数のテーブルを使って作業する

私のデータ構造は、(非常に省略非関連の行と列と縮合した)です:

MyDb.Source 
+--------+-------------+--------------------------------------+ 
| ID  | SOURCE_TYPE | URL         | 
+--------+-------------+--------------------------------------+ 
| 10  |   3 | https://en.wikipedia.org   | 
+--------+-------------+--------------------------------------+ 

MyDb.Resource 
+--------+------------+--------------------------------------+ 
| ID  | SOURCE_FK | IDENTIFIER       | 
+--------+------------+--------------------------------------+ 
| 1  |   10 | All_Saints_Church,_Marple   | 
+--------+------------+--------------------------------------+ 

MyDb.Item_Base 
+--------+-------------+--------------------------------------+ 
| ID  | RESOURCE_FK | ITEM_TITLE       | 
+--------+-------------+--------------------------------------+ 
| 55  |   1 | All Saints Church, Marple   | 
+--------+-------------+--------------------------------------+ 

MyDb.Item 
+--------+-------------+--------------------------------------+ 
| ID  | BASE_FK  | ITEM_DESCRIPTION     | 
+--------+-------------+--------------------------------------+ 
| 120 |   55 | Foo bar        | 
+--------+-------------+--------------------------------------+ 

ソース - リソースが多くの1です。

リソース - アイテムである1私がやろうとしています何

1. - Baseが1 Item_Base

1にありますか?

MyDb.Sourceから返される質問はできるだけ少なくなり、それに関連するすべての項目が見つかります。私は私の手に持っている唯一の情報は10.私は含まれていItem.IDの結果セットで終わりにしたいですソース、ためIDあるSource.IDは10

答えて

1

であるもの私はあなただけで内部結合することができると思います4つのテーブルを1つのクエリでまとめます。これは安全でなければなりません。なぜなら、ソースとアイテムの間に関係が存在するためには、キーの関係を介して到達可能でなければならないからです。

SELECT 
    t1.ID AS source_id, 
    t4.* 
FROM Source t1 
INNER JOIN Resource t2 
    ON t1.ID = t2.SOURCE_FK 
INNER JOIN Item_Base t3 
    ON t2.ID = t3.RESOURCE_FK 
INNER JOIN Item t4 
    ON t3.ID = t4.BASE_FK 
WHERE 
    t1.ID = 10 
1

あなたの質問にはINNER JOINが必要です。そして、それは1つの単純なクエリで可能です:

SELECT 
    i.ID 
FROM 
    Source s 
    INNER JOIN Resource r 
    ON s.ID = r.SOURCE_FK 
    INNER JOIN Item_Base b 
    ON r.ID = b.RESOURCE_FK 
    INNER JOIN Item i 
    ON b.ID = i.BASE_FK 
WHERE 
    s.ID = 10 

は、より多くの情報と合流し、その使用方法に関連する例については、https://dev.mysql.com/doc/refman/5.7/en/join.htmlhttp://www.mysqltutorial.org/mysql-inner-join.aspxを参照してください。

+0

リンクに感謝します。私は前に結合を使用しようとしましたが、そうではありませんでした。私は次回私が自分のPCにいる時にそれを打ち明けます。 – Donglecow

関連する問題