Как добавить два строковых столбца из разных таблиц SQL Server? - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь добавить два столбца вместе с типом данных char, чтобы объединить их код с описанием.

таблица1 содержит все необходимые мне данные, и я только ссылаюсь на таблицу2, чтобы получить описание.

Например, таблица1 имеет столбец:

Code

1
2

, а в таблице 2 есть столбцы:

Code      Description

1         Football
2         Soccer

Я в основном пытаюсь написать запрос, в котором можно показать один столбец

1 - Football
2 - Soccer

Я пытался:

SELECT 
    a.Code + ' - ' + b.Description
FROM table1 a
LEFT JOIN table2 b
ON a.Code = b.Code

и хотя это добавляет столбцы вместе, по какой-то причине он также генерирует много повторяющихся строк, я полагаю, из-за ЛЕВОГО СОЕДИНЕНИЯ.

По сути, я просто хочу, чтобы любой код в таблице1 соответствовал этому коду в таблице2 и передавал это описание.

Ответы [ 4 ]

1 голос
/ 13 июня 2019

Какая связь между таблицей1 и таблицей2? Единственный способ, которым я вижу вышеупомянутый запрос, возвращающий дубликаты: Если отношения между таблицей 1 и таблицей 2 равны 1: многие. Значение одной строки в таблице1 может совпадать с несколькими строками в таблице 2.

  1. Вам нужно получить код, который существует в таблице 1, даже если у него нет соответствующего описания в таблице 2? Если это так, используйте левое соединение, как показано ниже.
    • Если в table2 есть прямые дубликаты, то использование DISTINCT удалит
      дубликаты в конечном результате:
    SELECT DISTINCT
           a.Code + ' - ' + COALESCE(b.Description, '')
    FROM table1 a
         LEFT JOIN table2 b
           ON a.Code = b.Code;
    
    • Если один код имеет несколько разных описаний в таблице 2, то ваш ожидается, что окончательный набор результатов будет иметь несколько строк для одного и того же кода но с другим описанием, запустив вышеуказанный запрос из-за Характер данных в таблицах.
  2. Вам нужно получить код, который существует в таблице 1, только если он имеет соответствующее описание в таблице 2? Если это так, используйте ВНУТРЕННЕЕ СОЕДИНЕНИЕ, как показано ниже.
    SELECT DISTINCT
           a.Code + ' - ' + b.Description
    FROM table1 a
         INNER JOIN table2 b
           ON a.Code = b.Code;
    
1 голос
/ 13 июня 2019

Вы можете использовать ISNULL для обработки пропущенного значения из таблицы 2:

SELECT 
    a.Code + ISNULL(' - ' + b.Description, '')
FROM table1 a
LEFT JOIN table2 b
ON a.Code = b.Code
1 голос
/ 13 июня 2019

При левом соединении вы получите значения в таблице A, которые могут отсутствовать в таблице B. Чтобы исключить дубликаты, вы можете попробовать

SELECT DISTINCT
    a.Code + ' - ' + b.Description
FROM table1 a
LEFT JOIN table2 b
ON a.Code = b.Code

ИЛИ

SELECT 
    a.Code + ' - ' + b.Description
FROM table1 a
LEFT JOIN table2 b
ON a.Code = b.Code
GROUP BY a.Code, b.Description
1 голос
/ 13 июня 2019

используйте coalesce в случае нулевого значения для 2-й таблицы и используйте distinct в случае избежания дублирования

SELECT distinct a.Code +' - ' + coalesce(b.Description,'')
FROM table1 a
LEFT JOIN table2 b
ON a.Code = b.Code

or try like below and i dont think you needed join you can do it just by using 2nd tabale
SELECT 
    b.Code ||' - ' || b.Description)
from
table2 b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...