mysql使用具有不同值表示的两列匹配两个表

时间:2013-05-31 23:24:30

标签: mysql

我有两张桌子想要搭配 目标是根据性别找出哪个广告可用于哪个代理:

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'

我可以在应用程序级别执行此操作,但我最终希望有一个查询,以便我可以创建视图/表并每天更新它。 谢谢你们。

3 个答案:

答案 0 :(得分:1)

select ad_id, agent_id
from agents
join ads on gender_id = 1 or gender_id = (if (gender = 'FEMALE', 2, 3))

答案 1 :(得分: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 :(得分:0)

这是“中途正常化”。更改表“代理商”,添加字段“gender_id”,在表格上进行更新,如... set gender_id = 1 where gender = 'FEMALE* ...,删除字段“性别”,并感到高兴。