select * from wk_user where id not in (select user_id from wk_diary where wk_date=?)

解决方案 »

  1.   

    select * from wk_user a where not exists (select 1 from  wk_diary where convert(char(8),b.wk_date,112)=convert(char(8),getdate(),112) and [user_id]=a.[id])
      

  2.   

    --@thisday is the input para
    declare @thisday datatime
    set @thisday='2003-2-13'select [id],[username],[name] from wk_user where id not in (select user_id from wk_diary where 
    convert(varchar(10),wk_date,121)=convert(varchar(10),@thisday,121) )
      

  3.   

    select * from wk_user a where not exists (select 1 from  wk_diary where convert(char(8),b.wk_date,112)=convert(char(8),你的时间,112) and [user_id]=a.[id])
      

  4.   

    谢谢各位的回答,我明白了!我有一个更进一步的想法。
    现在只是列出某一天没有记录日志的情况,能否使用一条语句查找:1、一个用户在哪天没有记录日志
    2、多个用户呢谢谢!ps: 各位推荐本关于sql的好书
      

  5.   

    1.select distinct convert(char(8),wk_date,112) as day from wk_diary where 
    convert(char(8),wk_date,112) not in (select convert(char(8),b.wk_date,112) from 
    wk_user a inner join wk_diary b on a.id=b.user_id where a.id=?)
      

  6.   

    select * from(select * from wk_user a,(select distinct convert(char(8),wk_date,112) wk_date from wk_diary )b where a.id='2' or rtrim(a.username)='aa' )tem
    where not exists (select 1 from wk_diary where [user_id]=tem.id and convert(char(8),wk_date,112)=tem.wk_date)
      

  7.   

    select * from(select * from wk_user a,(select distinct convert(char(8)
    ,wk_date,112) wk_date from wk_diary )b where a.id='2' or rtrim(a.username)
    ------------------------------------------------^^^^^^^^^^^^^^^^^^^^^这里的条件可以选择多个用户!
    ='aa' )tem
    where not exists (select 1 from wk_diary where [user_id]=tem.id and convert(char(8),wk_date,112)=tem.wk_date)
      

  8.   

    假设每一天最少有一个用户记日记,则可以用
    select distinct wk_date from wk_diary
    where wk_date not in 
    (select wk_date from wk_diary where userid=id1)
    多个用户用
    where wk_user.user_id in (id1,id2,id3)
      

  9.   

    SELECT * FROM
    (SELECT DISTINCT CONVERT(CHAR(8), wk_d.wk_date, 112) AS wk_date FROM wk_diary wk_d) tmp
    CROSS JOIN 
    (SELECT DISTINCT wk_e.wk_time AS wk_t FROM wk_diary wk_e) tmp1
    CROSS JOIN
    (SELECT wk_f.[id] AS u_id, wk_f.[name] AS u_name FROM wk_user wk_f) tmp2
    LEFT OUTER JOIN
    (SELECT CONVERT(CHAR(8),wk_g.wk_date,112) AS wk_date, wk_g.wk_time AS wk_time, wk_g.[user_id] AS u_id FROM wk_diary wk_g) tmp3
    ON tmp.wk_date=tmp3.wk_date AND tmp1.wk_t=tmp3.wk_time AND tmp2.u_id=tmp3.u_id
    WHERE tmp3.wk_time IS NULL
    ORDER BY tmp.wk_date DESC,tmp1.wk_t
      

  10.   

    以上是我自己的答案,通过sql查询分析器看到的结果是正确的!谢谢楼上回答问题的朋友,谢谢你们的帮助!也要谢谢新公司的同事,是他给我的思路!更要感谢sql查询分析器,通过他的帮助,我自己写出来了!!!
      

  11.   

    SELECT [tmp].[wk_date] AS [wk_date], [tmp1].[wk_time] AS [wk_time], [tmp2].[user_id] AS [user_id], [tmp2].[grp_id] AS [grp_id], [tmp2].[dep_id] AS [dep_id], [tmp2].[name] AS [name] FROM
    (SELECT DISTINCT CONVERT(CHAR(8), [wk_date], 112) AS [wk_date] FROM [wk_diary] [wk_d]) [tmp]  -- wk_date
    CROSS JOIN 
    (SELECT DISTINCT [wk_time] AS [wk_time] FROM [wk_diary] [wk_e]) [tmp1]  -- wk_time
    CROSS JOIN
    (SELECT [id] AS [user_id], [grp_id], [dep_id], [name] FROM [wk_user] [wk_f]) [tmp2]  -- user_id, [name]
    LEFT OUTER JOIN
    (SELECT CONVERT(CHAR(8), [wk_date], 112) AS [wk_date], [wk_time], [user_id] FROM [wk_diary] [wk_g]) [tmp3]  -- all field
    ON [tmp].[wk_date] = [tmp3].[wk_date] AND [tmp1].[wk_time] = [tmp3].[wk_time] AND [tmp2].[user_id] = [tmp3].[user_id]WHERE [tmp3].[wk_time] IS NULL
    ORDER BY [tmp].[wk_date] DESC, [tmp1].[wk_time]我又整理了一下!