Полное внешнее соединение SQL

#sql #sql-server #join

#sql #sql-сервер #Присоединиться

Вопрос:

Я занят завершением старой экзаменационной работы

Один вопрос звучит следующим образом:

Изучите следующие таблицы и ответьте на вопросы, приведенные ниже:

 CREATE TABLE CARDHOLDERS(
CH_ID INTEGER IDENTITY,
CH_NAME VARCHAR(50),
CH_SURNAME VARCHAR(50),
CH_IDNUMBER CHAR(13),
CH_CARDNUMBER CHAR(13),
CH_STATUS CHAR(2),
CH_CREATE_DATE DATETIME,
CH_LAST_CHANGE_DATE DATETIME)

CARDHOLDER_STATUS //apologies if this is wrongly formatted 
CHS_STATUS  CHS_DESCRIPTION
00          Active
01          Not Active
 

Напишите запрос для получения следующих результатов

 Cardholder  Status
Ashton, T   Active
Brown, C    Active
Crawford, C Not Active
Ellis, J    Active
 

Я предполагаю, что мне придется использовать полное внешнее соединение, поскольку ни один столбец не совпадает в двух таблицах.
Я написал этот фрагмент кода, но он выдает синтаксическую ошибку.

 SELECT CH_NAME, CH_SURNAME
FROM CARDHOLDERS
FULL OUTER JOIN 
ON CARDHOLDER_STATUS.CHS_STATUS, CARDHOLDER_STATUS.CHS_DESCRIPTION
 
  • Я на правильном пути или моя логика совершенно неверна?
  • Правильно ли я использую внешнее соединение, какое-либо альтернативное соединение, которое я мог бы использовать?
  • Как я могу извлечь только первую букву из CH_NAME для использования в качестве начальной?

Комментарии:

1. Вы не можете просто присоединиться CH_STATUS = CHS_STATUS ?

Ответ №1:

Не видя примеров данных, я бы ожидал, что он будет следовать «просто работать»:

 SELECT      ch.CH_SURNAME   ', '   LEFT(ch.CH_NAME, 1) AS Cardholder,
            chs.CHS_DESCRIPTION AS Status

FROM        CARDHOLDERS AS ch

INNER JOIN  CARDHOLDER_STATUS AS chs
    ON      chs.CHS_STATUS = ch.CH_STATUS
 

Ответ №2:

Попробуйте это

    SELECT CH_NAME ','  CH_SURNAME,CHS_Description
    FROM CARDHOLDERS C
    JOIN  CARDHOLDER_STATUS  S on S.CHS_STATUS = C.CH_STATUS