问题如下:现在两个表,表A和表BA表如下:
PKID   sendname   sendcontent
  1       aaa       fjsdfjf
  2       ddd       fdsafas
  3       ccc       fdjskkjf
  4       fje       fdskjffB表如下:
PKID   answername  answercontent
  1       ddd         fdjksffsd
  1       eee         fjdksfksdj
  1       tt2         fjkdjkfj
  3       ddd         jfdjjeii
  3       tt2         fjsjijwf其中sendname和answername都是用户名
我是在做一个小论谈,A表是主题表(也就是问题表),B表是回复表,我想用一条SQL语句查出所有ddd用户参与过的主题的A表的记录(不需要返回B表的记录),我是这么写的
SELECT * FROM A WHERE sendname='ddd' OR PKID=(SELECT PKID FROM B WHERE answername='ddd')
这样查报错,"子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的"。各位大哥,请问我想实现这样的查询用一条SQL语句应该怎么写?请注意,只能是一条语句.

解决方案 »

  1.   

    SELECT * FROM A WHERE sendname='ddd' OR PKID in (SELECT PKID FROM B WHERE answername='ddd')
      

  2.   

    select * from a inner join b on a.name=b.name where a.name=''
    没有测试,试一下,就是链接查询。
      

  3.   

    SELECT * FROM A inner join B on A.PKID=B.PKID
    WHERE sendname='ddd' OR answername='ddd'  
    group by PKID尚未测试  先出去抽烟  回来再测试 
    如果正确  你把分给俺  俺都一年多了还是一颗星星  :(
      

  4.   

    SELECT * FROM A WHERE sendname='ddd' OR PKID in (SELECT PKID FROM B WHERE answername='ddd')
    上面这个可以了
      

  5.   

    select * from a where pkid in ( select  distinct pkid from b where answername='ddd')
      

  6.   

    select A.PKID ,A.sendname, A.sendcontent From A  
    Where  A.PKID in 
    (
        select B.PKID From B Where  B.answername='ddd'
    )
      

  7.   

    我的错了 
    ctrl2(ctrl2.net) 的应该是正确的
      

  8.   

    这个效率会很低的
    SELECT * FROM A WHERE sendname='ddd' OR PKID in (SELECT PKID FROM B WHERE answername='ddd')建议用连接
    select A.* from A left outer join B on A.pkid = B.pkid where A.sendname='ddd' or B.answername='ddd'
      

  9.   

    B表是回复表中ddd 的回复不止一条,所以要用 distinct!