select u.user_id, us.email_type from users u, user_sub us
 where u.user_id =  us.user_id
 and (US.ALERT_TYPE = 'ARTICLE_ALERT' or US.Alert_Type='FORUM_ALERT' )SQL 语句探讨
user_sub表结构为
user_id,  alert_type, email_typeuser_sub表中一个user_id有多个记录,
但users表中一个user_id 只能对应一条记录,两表关联的时候, 就有可能产生多条重复的记录, 我不想用distinct 去掉重复的记录, 有什么办法呢?

解决方案 »

  1.   

    你还是用distinct来做好点
    除非你在user_sub中一个user_id下的多条纪录有其它字段来区分
    比如我们常会加个SEQ来区分,那就取SEQ=1的就行了
      

  2.   

    select user_id,  alert_type, email_type from
    (select user_id,  alert_type, email_type,row_number() over(partition by user_id order by rowid) rn
    from user_sub ) where rn=1 
    用这个表去与users表关联
      

  3.   

    如果2表有重复记录就只distinct了,或者group by一把,或者类似上面的方式,或者先distinct2表,然后连接结果集, 不过还是distinct要好一些。