0

一致させたい 2 つのテーブルがあります。目標は、性別に基づいて、どのエージェントがどの広告を利用できるかを見つけることです。

table 'agents' has (gender, name,agent_id).
table 'ads' has (ad_id,gender_id, ad_name).

(ad_id,viewer_id) を持つ一致するテーブル/ビュー/選択を作成する必要があります。

viewer.gender could be 'FEMALE' or 'MALE'
ads.gender_ID could be '1' stands for both , '2' stands for FEMALE and '3' stands for 'MALE'

アプリケーションレベルでこれを行うこともできますが、最終的にはビュー/テーブルを作成して毎日更新できるようにクエリが必要です。みんなありがとう。

4

3 に答える 3

1
select ad_id, agent_id
from agents
join ads on gender_id = 1 or gender_id = (if (gender = 'FEMALE', 2, 3))
于 2013-05-31T23:30:57.397 に答える
0

結合を使用してこれを行うことができます。この関係は、通常の結合よりも少し複雑です。

select ad.ad_id, ag.agent_id as viewer_id
from ads ad join
     agents ag
     on (ad.gender_id in (1, 2) and ag.gender = 'FEMALE') or
        (ad.gender_id in (1, 3) and ag.gender = 'MALE')

これは、大きなテーブルでは効率的ではありません。それが問題である場合は、性別を正規化して、2 つのテーブルで一致するようにします。

于 2013-05-31T23:31:11.243 に答える
0

これが「中途半端な正規化」です。テーブル「agents」を変更し、フィールド「gender_id」を追加し、テーブルを次のよう... set gender_id = 1 where gender = 'FEMALE* ...に更新し、フィールド「gender」を削除して、幸せを感じます。

于 2013-05-31T23:43:13.770 に答える