3

私はmysqlに取り組んでおり、同じスキーマを持つ2つのテーブルがあります。

試用前

|id|accusedId|articleid|
------------------------
|1 |     1   |     1   |
|2 |     1   |     2   |
|3 |     1   |     3   |
|4 |     2   |     1   |
|5 |     2   |     2   |

トライアル

|id|accusedId|articleid|
------------------------
|1 |     1   |     1   |
|2 |     1   |     2   |
|3 |     2   |     1   |
|4 |     2   |     2   |

accusedIds最初のテーブルと2番目のテーブルがすべてarticleIds等しいものを取得したいと思います。

上記の例では、accusedId 2のみを返す必要があります。これは、accusedId 1の場合、2番目のテーブルにarticleId3がないためです。

私が何を意味するのか理解していただければ幸いです。私は現在、法学の論文を書いていますが、SQLを始めた時期はもう過ぎ去りました。もちろん、私はすでにいくつかの調査を行い、いくつかの結合を試みましたが、解決策を見つけることができませんでした。うまくいけば、あなたは私を助けることができます。

4

1 に答える 1

1

次のようなことを試してください:

select a.accusedId , sum(a.accusedid) as cnt_a, sum(coalesce(b.accusedId, 0)) as cnt_b
from a left join b on a.accusedId =  b.accusedId and a.articleId = b.articleId
group by accusedId
having cnt_a = cnt_b

私もそれを実行していないので、少しずれているかもしれませんが、それを試してみてください。それがしているのは、b と一致しない a の行に対してゼロを返すため、HAVING 句は、グループ化された結果を記事数が等しいものにフィルターします。

于 2012-05-18T10:26:50.820 に答える