选择两个表中没有外键属性的所有行

Loc*_*rde 0 t-sql sql-server-2008

我有两个数据库中的表,比方说,carsbikes.它们都只有两列id,name如下所示:

Bikes table(BikeID int, BikeName)
Cars Table(CarId int, CarName)
Run Code Online (Sandbox Code Playgroud)

这两个表绝对没有物理关系,(没有外键等)没有主键,它实际上只是一列值.

我想从两个表中选择所有行.但如果他们有共同的名字,我想把它们结合起来,如下:

Name        BikeId        CarId
```````````````````````````````
Car1         null         1
Car2         null         2
Bike1        1            null
Bike2        2            null
BikeCar      3            5
Run Code Online (Sandbox Code Playgroud)

甚至可以这样做吗?我正在使用tsql(Sql server 2008)

谢谢.

ps:我可以考虑制作两个tmp表,添加值,制作第三个临时表,使用while循环并检查每个产品等等.但我只是想知道是否有更短的方法来做...谢谢.

编辑:我意识到我没有想太多就输入了这个问题.改变.谢谢.

Chr*_*fer 8

与帖子标题相反,这可以使用连接完成.FULL OUTER JOIN将返回尽可能连接在一起的两个表的所有结果,但如果连接条件不匹配,则将为其他表列返回NULL(类似于同时执行左外连接和右外连接).

SELECT
    ISNULL(Bikes.BikeName, Cars.CarName) AS Name,
    Bikes.BikeId,
    Cars.CarId
FROM Bikes
    FULL OUTER JOIN Cars ON Bikes.BikeName = Cars.CarName
ORDER BY ISNULL(Bikes.BikeName, Cars.CarName)
Run Code Online (Sandbox Code Playgroud)