繁体   English   中英

如何使用 Sql 左连接 2 个表,但 table2 具有多对一关系

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM