ホームページ  >  に質問  >  本文

SQL データベース内の相互に完全な互換性のある行を取得します。

私のデータベースにはこの単純な構造があります

リーリー

種 A と種 B は、情報の重複を防ぐために複合固有であることを指摘したいと思います。たとえば、データベースに 5 つの種しかない場合、互換性テーブルは次のようになります:

リーリー

指定された種のリストから相互に完全に互換性のある種のリストを返すクエリを作成する必要があります。つまり、結果のリスト内のすべての種は、提供されたリスト内のすべての種と互換性がある必要があります。提供された種は結果リストに表示されてはなりません。

次のクエリを試しましたが、指定された種の少なくとも 1 つと互換性のある種のみが返されました:

リーリー

このクエリを変更して、相互に完全に互換性のある種のリストを取得するにはどうすればよいですか?

上記のクエリの場合、期待される結果は種 4 のみを含む種リストになるはずです。種 1、2、3 は提供されたリストから除外され、5 は種 1 および 2 との適合性がないため除外する必要があります。

助けやアドバイスをいただければ幸いです。ありがとう!

P粉103739566P粉103739566427日前459

全員に返信(2)返信します

  • P粉684720851

    P粉6847208512023-09-10 10:46:11

    この問題は、フィルタリングと集計によって解決できます。

    リーリー

    サブクエリは、参照種 (ref) と互換性のある種 (spec) を 2 つの異なる列に配置します。次に、関心のある 3 つの参照種をフィルタリングして、互換性のある種ごとにグループ化し、最終的に having 句に正確に一致するグループを保持します。

    種の名前も知りたい場合は、参加できます:

    リーリー

    DB フィドル デモ

    返事
    0
  • P粉739942405

    P粉7399424052023-09-10 00:55:29

    これには、互換性 = 1 で明示的にリンクされている種のみが含まれます (つまり、種はデフォルトで互換性がないと想定されます)

    リーリー

    これには、互換性 = 0 に明示的に関連付けられた種を除くすべての種が含まれます (つまり、種はデフォルトで互換性があると想定されます)

    リーリー

    これらのどちらがロジックに適しているかにかかわらず、クエリのパフォーマンスを最適化するために、compatibility.speciesA 列と compatibility.speciesB 列にインデックスを追加することをお勧めします。 p>

    返事
    0
  • キャンセル返事