Вернуть одну строку, когда 2 записи в правой таблице - PullRequest
1 голос
/ 06 мая 2010

У меня есть две связанные таблицы сервера sql ... TableA и TableB.

***TableA - Columns***
TableA_ID     INT
VALUE         VARCHAR(100)

***TableB - Columns***
TableB_ID     INT
TableA_ID     INT
VALUE         VARCHAR(100)

Для каждой отдельной записи в TableA в TableB есть всегда 2 записи.Поэтому TableA имеет отношение «один ко многим» с TableB.

Как можно написать один SQL-оператор для объединения этих таблиц и возврата по одной строке для каждой строки в TableA, которая включает:

  • столбец для столбца VALUE в первой связанной строке в таблице B
  • столбец для столбца VALUE в второй связанной строке в таблице B?

1 Ответ

2 голосов
/ 06 мая 2010

Это точно для двух связанных записей.Присоединитесь к таблице B дважды:

SELECT 
  A.TableA_ID,
  A.VALUE      AS VALUE_A
  B1.VALUE     AS VALUE_B1
  B2.VALUE     AS VALUE_B2
FROM
  TableA AS A
  INNER JOIN TableB B1 ON B1.TableA_ID = A.TableA_ID
  INNER JOIN TableB B2 ON B2.TableA_ID = A.TableA_ID
WHERE
  B1.TableB_ID < B2.TableB_ID

Если в таблице B есть столбец, определяющий, что такое «первое значение», а что «второе значение», это становится еще проще (и это будет работать так дляN столбцов в таблице B, просто добавьте больше объединений):

SELECT 
  A.TableA_ID,
  A.VALUE      AS VALUE_A
  B1.VALUE     AS VALUE_B1
  B2.VALUE     AS VALUE_B2
FROM
  TableA AS A
  INNER JOIN TableB B1 ON B1.TableA_ID = A.TableA_ID AND B1.Type = '1'
  INNER JOIN TableB B2 ON B2.TableA_ID = A.TableA_ID AND B2.Type = '2'

Составной индекс на TableB сверх (TableA_ID, Type) помогает этому объединению.

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