выделить все строки в двух таблицах без свойства внешнего ключа - PullRequest
0 голосов
/ 09 июня 2011

У меня есть две таблицы в базе данных, скажем, cars и bikes.Они оба имеют только два столбца id и name примерно так:

Bikes table(BikeID int, BikeName)
Cars Table(CarId int, CarName)

Эти две таблицы не имеют абсолютно никаких физических связей, (никаких внешних ключей и т. Д.), Никаких первичных ключей, на самом деле это просто столбецзначения.

Я хочу выбрать все строки из обеих таблиц.Но если у них есть общие имена, я хочу объединить их, например, так:

Name        BikeId        CarId
```````````````````````````````
Car1         null         1
Car2         null         2
Bike1        1            null
Bike2        2            null
BikeCar      3            5

Возможно ли это сделать?Я использую tsql (Sql server 2008)

спасибо.

ps: я могу подумать о создании двух таблиц tmp, добавлении значений, создании третьей временной таблицы, использовании цикла while и проверке на наличиекаждый продукт и т.д ... но мне просто интересно, есть ли более короткий способ сделать это ... спасибо.

править: я понял, что набрал вопрос, не слишком задумываясь.изменилось.спасибо.

Ответы [ 4 ]

8 голосов
/ 09 июня 2011

Вопреки названию поста, это можно сделать с помощью объединения.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)
3 голосов
/ 09 июня 2011

Да, при использовании FULL OUTER JOIN: документация http://msdn.microsoft.com/en-us/library/ms187518.aspx

0 голосов
/ 09 июня 2011

Попробуйте: -

SELECT 
  Name, MAX(BikeId) AS BikeId, MAX(CarId) AS CarId
FROM
(
   SELECT CarName AS Name, NULL AS BikeId, CarId FROM Cars
   UNION
   SELECT BikeName AS Name, BikeId, NULL AS CarId FROM Bikes
) vehicles
GROUP BY
  NAME
0 голосов
/ 09 июня 2011
select BikeName as Name, BikeID, null as CarID from Bikes
union all
select CarName as Name, null as BikeID, CarID from Cars

Должен сделать это за вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...