[英]how to use Sql join left with 2 tables but table2 has many-to-one relation
我的数据库中有 2 个表,我想将它们连接在一起,但是因为有时我在表 2 中有多个连接到 table1 的记录,所以我想在新列中显示它们。 我在 .net C# 中有应用程序,它发送查询并从中读取。
表格1:
ID | 姓名 |
---|---|
1 | 詹姆士 |
2 | 简 |
3 | 吉尔 |
表2:
ID | table1_id | country_visited |
---|---|---|
1 | 1 | 美国 |
2 | 1 | 德国 |
3 | 2 | 法国 |
我希望查询的最终结果是:
ID | 姓名 | 国家 | 国家 | …… |
---|---|---|---|---|
1 | 詹姆士 | 美国 | 德国 | …… |
2 | 简 | 法国 | 这里没有专栏 | |
3 | 吉尔 | 没有更多的列 |
我的问题是可以让行有不同的列吗? 并且如果不可能所有行都具有最大国家列(由访问单个键的最大国家数量更改)并且其值具有 null 。
前任:
ID | 姓名 | 国家 | 国家 | …… |
---|---|---|---|---|
1 | 詹姆士 | 美国 | 德国 | …… |
2 | 简 | 法国 | null | …… |
3 | 吉尔 | null | null | …… |
.... 代表如果我有更多的国家到一个单一的键。
也许我弄错了,但我想要的原因是因为我可以让一些用户没有访问过国家,而一些用户有一个或多个没有限制。
您需要 pivot 上的行号:
SELECT
id,
name,
MIN(CASE WHEN rn = 1 THEN countries_visited END) country1,
MIN(CASE WHEN rn = 2 THEN countries_visited END) country2,
MIN(CASE WHEN rn = 3 THEN countries_visited END) country3,
......... etc copy paste as many as you need
FROM (
SELECT t1.*, t2.countries_visited,
ROW_NUMBER() OVER (PARTITION BY t1.ID ORDER BY t2.countries_visited) AS rn
FROM Table1 t1
JOIN Table2 t2 ON t2.table1_id = t1.id
) t
GROUP BY id, name;
您也可以使用PIVOT
关键字来执行此操作,但这不太灵活。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.