表结构:
Article{id=主键,content=文章内容,update=时间,is_doc=是否为公文,author=作者}, is_doc=1则为公文通告,is_doc=0则为一般文章.Comment{id=主键,atk_id=外键->文章主键,content=评论内容,update=时间,author=作者}文章和评论的关系是1对多,一篇文章有多个评论
Article:Comment= 1:n
现在要根据条件查找文章,select * from Article1,但是如果是公文is_doc=1,只找出没有评论Comment的Article,如果有评论的,则显示在结果集里面.
2,如果is_doc=0,则都显示在结果集里面.select * from Article atk 
where 
if(is_doc=1&&[select count(1) as CNT from Comment cmt where cmt.atk_id = atk.id]==0 ){显示}
if(is_doc=1&&[select count(1) as CNT from Comment cmt where cmt.atk_id = atk.id]>0 ){不显示}
if(is_doc=0){显示}上面的if条件取并集.
不知道各位能否理解需求...
谢谢各位大虾...小弟只会简单的sql.这个需求有点古怪,没想出来...怎么处理?
谢谢各位

解决方案 »

  1.   


    select * from Article atk  
    where  
    (is_doc=1 and not exists (select 1 from Comment cmt where cmt.atk_id = atk.id))
    or is_doc=0
      

  2.   


    SELECT T1.*
      FROM ARTICLE T1
     WHERE T1.IS_DOC = 1
       AND NOT EXISTS (SELECT 1 FROM COMMENT T2 WHERE T1.ID = T2.ATK_ID)
    UNION ALL
    SELECT T1.*
      FROM ARTICLE T1, COMMENT T2
     WHERE T1.IS_DOC = 0
       AND T1.ID = T2.ATK_ID;