SQL で抱えているちょっとした問題について助けが必要です。
現在、MySQL 5.6.12
を搭載した 32 ビットの Wamp サーバーを使用しています。2 つのテーブルがあります。1 つは id (主キー) とその他のものを含み、2 番目のテーブルは最初のテーブルの nn 関係の結果であり、バグが発生する可能性があることを示します。別のクローンになります。
私がしなければならない
ことは、「複製された」バグの ID が隣にあるフィールドを持つバグのリストを取り出すことです。
私がすでに持っているもの:
私は解決策の一部を持っています。クローン化されたバグの一部を 1 つのバグに添付し、クローン化されたバグをリストから削除することに成功しました。実際のコードを提供したいと思いますが、持っていません。今はそうですが、ここでは(記憶による)次のようになります。
select bug_table.id, clones_table.clone
from bug_table
left outer join
(
select source_bug_id, Group_Concat(DISTINC cast(destination_bug_id AS string)) as clone
from relationship_table
Group by source_bug_id
) clones_table
On bug_table_id=source_bug_id
where id not in
(
select destination_bug_id
from relationship_table
)
このクエリは 2 つのサブクエリから作成されます。1 つ目は「クローン ID」のリストを「オリジン ID」に追加するためのもので、2 つ目はそれらの「クローン ID」を実際の結果から削除するためのもの
です。だから私の問題は: それだけですクローンの表の片側を見てください。言葉で説明する方法がわからないので、例を挙げて
みましょう 4 つのバグがあり、id 1、2、3、4 があり、それらはすべてクローンですお互いの関係の表に私は持っています
source_bug_id |destination_bug_id
1 |2
1 |3
1 |4
したがって、これを使用してクエリをスローすると、次のように出力されます。
id |clone
1 |2,3,4
まさに私が欲しいものですが、テーブルにこれが含まれている場合:
source_bug_id |destination_bug_id
1 |2
3 |2
4 |2
それは私を出力します
id |clone
1 |2
3 |2
4 |2
そして、確かに、それは私が望んでいるものではありません... 私の問題を解決するために私がすでに考えていること: 私のクエリでは、サブクエリを追加して、「from relationship_table」を置き換えて、テーブルを適切な形で準備することができます。のようなものかもしれません
(
select *
from relationship_table
group by destination_bug_id
)
union
(
select t1.destination_bug_id , t2.source_bug_id
from relationship_table as t1 inner join relationship_table as t2 on t1.destination_bug_id = t2.source_bug_id
where t1.source_bug_id not in
(
select source_bug_id
from relationship_table
group by destination_bug_id
)
)
私はそれをテストしませんでしたが、最初のサブクエリはすべてのdestination_bug_idをグループ化して、それらが一意であることを確認する必要があり、2番目のサブクエリは、欠落している行が元に戻った可能性があります:/
検索しましたが、英語の用語にあまり詳しくないので、答えを教えてくれる主題を見逃す可能性があります。