sql – 如何从两个相关但不同的表中获取不同的用户数

对此抱歉,但SQL对我来说不是一个强项,虽然看起来类似于许多其他查询,但我无法成功地将这些转换为这种情况.

如果表2中的行存在,我有两个表将通过公共值(id和Issue)相关联.

我需要获得一系列用户提出特定问题.我在两个表中都有用户,如果表2用户存在则优先使用.

表1中始终存在REPORTER,但表2中可能没有Namevalue of name(fieldtype = 1).如果存在Stringvalue,则表示“User”,并且可以忽略Reporter.

表格1

| id | Reporter| Type |
| 1  | 111111  | 1    |
| 2  | 111111  | 2    |
| 3  | 222222  | 2    |
| 4  | 333333  | 1    |
| 5  | 111111  | 1    |
| 6  | 666666  | 1    |

表2

|issue | Stringvalue | fieldType|
| 1    |  Fred       |    1     |
| 1    | bananas     |    2     |
| 2    |  Jack       |    1     |
| 5    |  Steve      |    1     |

我共有4个正确类型的问题(1,4,5,6),3个记者(111111,333333,666666)和两个Stringvalues(Fred,Steve).
我的不同用户总数= 4(Fred,333333,Steve,666666)

结果表

| id| T1.Reporter | T2.Name |
|  1|  Null       | Fred    |
|  4| 333333      | Null    |
|  5|  Null       | Steve   |
|  6| 666666      | Null    |

如何在SQL中获得此结果!

目前为止最近的尝试:

 SELECT 
  table1.REPORTER,
  TO_CHAR(NULL) "NAME"
  FROM table1
  Where table1.TYPE =1
  AND table1.REPORTER <> '111111'
 Union 
SELECT 
  TO_CHAR(NULL) "REPORTER",
  table2.STRINGVALUE "NAME"
FROM table2,
  table1 
WHERE table2.ISSUE     = table1.ID
AND table2.fieldtype= 1
and table1.issuetype = 1

如果没有明确排除默认表1 Reporter,即使表2中有名称值,也会在结果中返回.

我已经尝试过存在但无法获得正确的语法或正确的结果.只要尝试链接ID和Issue值的任何Join,结果总是最终约束到匹配的行或所有值.并且向ON添加附加条件不会返回正确的结果.

我已经尝试了太多的排列列表,逻辑上这听起来应该能够与存在的地方结合,或者留下外部联接,但我的技能缺乏使这项工作.

最佳答案 您需要使用LEFT JOIN,这是您指定fieldtype = 1子句的地方:

SELECT 
    table1.id,
    CASE
        WHEN table2.Stringvalue IS NOT NULL THEN table2.Stringvalue
        ELSE table1.Reporter
    END AS TheUser
FROM table1
LEFT JOIN table2 ON table1.id = table2.issue AND table2.fieldType = 1
WHERE table1.Type = 1

结果:

+------+---------+
| id   | TheUser |
+------+---------+
|    1 | Fred    |
|    4 | 333333  |
|    5 | Steve   |
|    6 | 666666  |
+------+---------+
点赞