如何将SQL查询与另一个表中的值一起使用

时间:2017-11-04 07:06:18

标签: sql sql-server

任务(编程任务列表)

execute

Assig(所有用户完成的编程任务列表)

TaskID  Lang          Description
---------------------------------
 1      python        test1
 2      python        test2
 3      javascript    test1
 4      python        test3

我最终想要的是如下表所示:

结果

  Id  TaskId   UserName      Lang
  ------------------------------------     
  1   1          x1         python
  2   2          x1         python
  3   3          x2         javascript     
  4   3          x1         python 

我尝试了以下内容,但我无法捕获 UserName 进行显示: 所以通常声明是:

TaskID  Assig.UserName Lang       Completed
1       x1             python     YES
2       x2             javascript  NO
3       x1             python     YES
4       x1             python     NO

1 个答案:

答案 0 :(得分:0)

你想要的结果"不可能

  1. 任务表中的任务2是" javascript"但不知何故," python"在结果中。
  2. 已完成的任务表(assig)中有4行,但该表中只引用了3个任务ID
  3. 组合表是:

    TaskID Lang    Description  assig.UserName assig.id completed
     1     python     test1          x1          1        TRUE
     2     python     test2          x1          2        TRUE
     3     javascript test1          x2          3        TRUE
     3     javascript test1          x1          4        TRUE
     4     python     test3          NULL       NULL      FALSE
    

    (nb:在任务4旁边放置用户名是不可能的,该数据不存在。)

    您可以从此查询中获得该结果:

    SELECT
          t.taskid
        , t.Lang
        , t.Description
        , a.username
        , CASE a.taskid IS NULL THEN 'FALSE' ELSE 'TRUE' END AS completed
        , a.id
    FROM tasks t
    LEFT JOIN assig a on t.taskid = a.taskid
    WHERE lang = @lang
    

    注意,如果为任务分配了多个用户名,该查询将为正在处理该任务的每个用户重复该任务。