0

我有两个要匹配的表目标是根据性别找到哪个代理可用于哪个广告:

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')

这在大桌子上效率不高。如果这是一个问题,则将性别标准化为它们在两个表中是一致的。

于 2013-05-31T23:31:11.243 回答
0

这是“中途归一化”。更改表“agents”,添加字段“gender_id”,在表上进行更新... set gender_id = 1 where gender = 'FEMALE* ...,删除字段“gender”并感到高兴。

于 2013-05-31T23:43:13.770 回答