私は多くのテーブルとの結合が苦手で、これを SQLite に入れるのに苦労しています。これらのテーブルを含むデータベースがあります。
Feeds->Channels->RegionsChannels->Regions。
ここで、Channels は、RegionsChannels を介して Regions への 0 個以上の接続を持つことができます。
地域には、ユーザーがこの地域を有効にしたかどうかを示すブール フィールド (0, 1) があります。
フィードからいくつかのフィールドを取得したいと考えています。たとえば、地域に接続されていないか、地域に接続されているチャネルを含むすべてのフィードの Feeds.id と Feeds.title で、Regions.selected = 1;
次のようにすべてのテーブルを結合してみました。
select feeds.feed_id, feeds.title
from feeds
left outer join channels on feeds.feed_id = channels.feed_id
left outer join regions_channels on channels.channel_id = regions_channels.channel_id
left outer join regions on regions_channels.region_id = regions.region_id
and regions.selected = 1
group by feeds.feed_id
order by feeds.feed_id;
選択した地域のみを取得しようとしましたが、とにかくすべてのフィードが返されました。リージョン テーブルで RIGHT OUTER JOIN を実行する必要があるのではないかと考えましたが、SQLite を使用しており、RIGHT OUTER JOIN または FULL OUTER JOIN をサポートしていません。
アップデート:
私はこれを試してみましたが、まさに私が望むものを手に入れています。いくつかのregion.selectedを切り替えましたが、毎回うまくいきます。しかし、それが本当に機能するのか、それとも機能しているように見えるだけなのか、私にはわかりません。
select feeds.feed_id, feeds.title
from feeds
left outer join channels on feeds.feed_id = channels.feed_id
left outer join regions_channels on channels.channel_id = regions_channels.channel_id
left outer join regions on regions_channels.region_id = regions.region_id
where regions._id is NULL
or regions.selected = 1
group by feeds.feed_id
order by feeds.feed_id;
これは私には適切ではありませんが、機能するので、今のところ使用しています...