Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MSSQL与自身连接_Sql_Sql Server - Fatal编程技术网

MSSQL与自身连接

MSSQL与自身连接,sql,sql-server,Sql,Sql Server,我有两张桌子: id 1 2 3 4 t1和t2 id | related_id 1 | 2 1 | 3 其中t2是t1记录之间的关系表。获得期望输出的最佳方法是什么 t1.id | t1_copy.id 1 | NULL -- want to get this NULL row 1 | 2 1 | 3 简单的JOIN几乎可以工作,但是它没有给我第一行NULL行 SELECT t1.id, t1_copy.id FROM t1 LEFT JOIN t2 ON t

我有两张桌子:

id
1
2
3
4
t1和t2

id | related_id
1  | 2
1  | 3
其中t2是t1记录之间的关系表。获得期望输出的最佳方法是什么

t1.id | t1_copy.id
1     | NULL -- want to get this NULL row
1     | 2
1     | 3
简单的
JOIN
几乎可以工作,但是它没有给我第一行
NULL

SELECT t1.id, t1_copy.id FROM t1
LEFT JOIN t2 ON t1.id = t2.id
LEFT JOIN t1 t1_copy ON t1_copy.id = t2.related_id
WHERE t1.id = 1

附言:是的,我确实意识到期望的产出是古怪的。

似乎一个简单的联盟就应该做到这一点

SELECT
   id, 
   null as copy_id
FROM
   t1 
WHERE
  exists (select * from t2 where t1.id = t2.id)
UNION ALL
SELECT
   t1.id,
   t2.related_id
FROM
   t1 
   INNER JOIN t2
   ON t1.id = t2.id

你想实现什么目标?如果
t2
中有一行,
NULL
应该在
4
记录的位置吗?@voithos,
NULL
应该在那里,在我的查询中添加了
where
子句来澄清。这可能是错误的,但我也不认为这会正常工作。
SELECT DISTINCT t1.id, t1_copy.id FROM t1
LEFT OUTER JOIN t2 ON t1.id = t2.id
WHERE t1.id = 1