gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 03:37:42 26 4
gpt4 key购买 nike

对此表示歉意,但 SQL 对我来说并不是一个强项,虽然看起来与许多其他查询相似,但我无法成功地将这些查询转化为这种情况。

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

我需要对提出特定问题的用户进行明确计数。我在两个表中都有用户,如果表 2 用户存在,则优先。

表 1 中总是有一个 REPORTER,但表 2 中可能没有 Name (fieldtype = 1) 的 Stringvalue。如果有 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),三个记者(111111,333333,666666)和两个字符串值(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 中有名称值,它也会在我的结果中返回。

我试过 exists并且 in 但无法获得正确的语法或正确的结果。只要尝试链接 ID 和问题值的任何联接,结果总是最终限制为匹配的行或所有值。并在 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 |
+------+---------+

关于sql - 如何从两个相关但不同的表中获取不同的用户计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33281550/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com