私は2番目のテーブルのキーに基づいて、同じテーブルにまとめた行を返すようにしようとしています

ティム印刷:

私はおそらくタイトルに非常によく、このことを説明していないが、私は2つのテーブルを持っています。ここでは、単純なバージョンがあります。

channel_data

entry_id   channel_id   first_name   last_name   model   other_fields
1          4            John         Smith
2          4            Jane         Doe
3          4            Bill         Evans
4          15                                    235
5          15                                    765
6          15                                    543
7          15                                    723
8          15                                    354
9          15                                    976
10         1                                             xxx
11         2                                             yyy
12         3                                             123

channel_titles

entry_id   author_id   channel_id
1          101         4
2          102         4
3          103         4
4          101         15
5          101         15
6          101         15
7          102         15
8          102         15
9          103         15
10         101         1
11         102         2
12         103         3

私は残念ながら、データを再モデル化することはできないのです。

私はchannel_titlesから同じAUTHOR_IDを持ちFIRST_NAMEとLAST_NAME channel_dataからCHANNEL_ID 15とし、それらの横にすべての行をリストする必要があります。

私は返すようにしたいことはこれです:

Model    First Name    Last Name
---------------------------------
235      John          Smith
765      John          Smith
543      John          Smith
723      Jane          Doe
354      Jane          Doe
976      Bill          Evans

モデルは一つのテーブルにあったと名前が別にあった場合、これははるかに簡単になりますが、私は、彼らが同じテーブルにある場合、このについては移動するかどうかはわかりません。

========================================

明確にするために編集されました。

私はchannel_dataからCHANNEL_ID 15と各モデルを取得する必要があります

各モデルのために私はAUTHOR_IDを見つけるためにchannel_titlesにしたentry_idをルックアップする必要があります

私はそのAUTHOR_IDで行を見つける必要がありAND(CHANNEL_ID 4と、各行が一意AUTHOR_IDを持っている)チャネルのタイトルで4 CHANNEL_ID。

私はchannel_dataに、この行バックのたentry_idを取り、モデルと行くためにFIRST_NAMEとLAST_NAMEを取得する必要があります。

私は、データが十分に構造化されていないことを十分認識していますが、それは私が仕事に持っているものです。私は、データを改造することは、この時点ではオプションではありません、はるかに大きなシステムでは、非常に小さなタスクを達成しようとしています。

私は、サブクエリが、私が探しています何のかもしれないと思うが、これは通常、すべてで私の地域ではありません。

ニック:

[OK]を、それを畳み込みます。しかし、あなたの説明に基づいて、このクエリは、あなたが望む結果を与える必要があります。説明は、あなたの質問に説明してきた論理に従ってください。WHEREJOIN

SELECT cd1.model, cd2.first_name, cd2.last_name
FROM channel_data cd1
JOIN channel_titles ct1 ON ct1.entry_id = cd1.entry_id
JOIN channel_titles ct2 ON ct2.channel_id = 4 AND ct2.author_id = ct1.author_id
JOIN channel_data cd2 ON cd2.entry_id = ct2.entry_id
WHERE cd1.channel_id = 15
ORDER BY cd1.entry_id

出力:

model   first_name  last_name
235     John        Smith
765     John        Smith
543     John        Smith
723     Jane        Doe
354     Jane        Doe
976     Bill        Evans

SQLFiddleのデモ

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=320303&siteId=1