比如,数据库表(T)里有如下数据
id   name    pwd
1     aaa     asdfa98
2     bbb     asdf989
5     ccc     asdjf283
6     eee     alsdfj32
7     rrr     alsjf232我写如下SQL:
select * from T where id in (1, 2, 3, 4);那么现在的输出结果应该为:
id   name    pwd
1     aaa     asdfa98
2     bbb     asdf989但是, 我现在的需求是需要输出
id   name    pwd
1     aaa     asdfa98
2     bbb     asdf989
3      null     null
4     null       null就是说, 虽然in里面的条件有的表里面是不存在的,但是我还是需要在输出时, 把查询条件输出,内容不存在的补空,这个如何在SQL里直接实现?

解决方案 »

  1.   

    用一个表,一个字段ID,存入1-7(根据你的工作表最大ID),再与工作表UNION,再查询
      

  2.   

    select a.id,t.name,t.pwd
    from (
    select 1 as id
    union all
    select 2
    union all
    select 3
    union all
    select 4
    union all
    select 5
    union all
    select 6
    union all
    select 7
    ) a left join t on a.id=t.id
    where a.id in (1, 2, 3, 4);
      

  3.   

    这太复杂了,这in里面要是有几千个, 表里面有几百万条, 怎么办啊。 那得多长的SQL啊。- - - -
      

  4.   

    按照一楼的办法生成一个ID表,然后去LEFT JOIN了