sql - 左连接选择表 1 中的所有记录和表 2 的单个(可选)记录

标签 sql sql-server sql-server-2008

在我的数据库中,我必须具有一对多(可选)关系的表1....0,*

Table1:
+--+---------+
|id|   name  |
+--+---------+
| 1|  user1  |
| 2|  user2  |
| 3|  user3  |
+--+---------+


Table2
+--+------+-------+
|id|tb1_ID|city   |
+--+------+-------+
| 1|   1  |  a    |
| 2|   1  |   b   |
| 3|   2  |   c   |
+--+------+-------+

现在我想要表 1 中的所有现有记录和表 2 的前 1 个元素(对于每个表 1 行)

喜欢

+----+------+----+--------+---------+
|p.id|p.name|c.id|c.tb1_ID|c.city   |
+----+------+----+--------+---------+
|  1 | user1|  1 |    1   |    a    |
|  2 | user2|  3 |    2   |    c    |
|  3 | user3|null|   null |   null  |
+----+------+----+--------+---------+

怎么办???

最佳答案

例如这个WITH common_table_expressionROW_NUMBER功能:

WITH cte AS(
    SELECT  t1.id AS t1ID
    ,       t1.name 
    ,       t2.id AS t2ID
    ,       t2.tb1_ID
    ,       t2.city
    ,       ROW_NUMBER()OVER(Partition By t1.id Order By t2.id)AS t1RowNum
    FROM Table1 t1 LEFT OUTER JOIN Table2 t2 ON t1.id=t2.tb1_ID
)
SELECT cte.* 
FROM   cte 
WHERE  t1RowNum = 1

关于sql - 左连接选择表 1 中的所有记录和表 2 的单个(可选)记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10582410/

相关文章:

php - Jquery 添加值进行选择

sql - SQL模糊联接-MSSQL

sql-server - T-SQL 替换 XML 节点

c# - 查找数据库中打开的连接数

sql - 在 MS SQL Server 2008 中创建序列

mysql - 如何从基于其他 3 个表的表中选择数据?

c# - ElasticSearch 与 SQL 全文搜索

sql-server - xp_instance_RegRead和xp_RegRead之间的区别

sql-server - 从 Web 执行时查询超时,但从 SSMS 执行时速度超快

sql - 有 INNER JOIN 限制吗?