Данные испытаний:

TableA (ID_B, uniqueID, status)

TableB (ID_B, ID_C, info)

Таблица А:

ID_B   uniqueID   status
124    12345678   registered

Таблица Б

ID_B   ID_C   info
123    111    ilo
124    111    vey
125    111    ou
126    112    sup

Я хочу вернуть (ID_B, ID_C, info, status), где статус - это статус по умолчанию, например 'Default', если в TableA нет указанного uniqueID.

Я пытался

SELECT * FROM tableB AS tB INNER JOIN(
SELECT ID_B, COALESCE(MAX(tA.status), 'default') as status
FROM tableA AS tA
WHERE  tA.uniqueID = '12345678'
) AS tC WHERE ID_C = 111

Однако я получаю либо все статусы по умолчанию (когда uniqueID не существует в tableA), либо все статусы не по умолчанию.

Ниже приведен пример результата, который я хочу

ID_B  ID_C  info  status
123   111   ilo   default
124   111   vey   registered
125   111   ou    default
-1
user859385 26 Июн 2017 в 12:56
1
Пожалуйста, предоставьте свои исходные данные, чтобы было легко найти решение
 – 
Jim Macaulay
26 Июн 2017 в 12:58
Сделайте левое соединение таблицы A на B и в выбранном варианте использования, когда a.uniqueID имеет значение null, затем 'Default', иначе b.Status end
 – 
Veljko89
26 Июн 2017 в 13:01

1 ответ

Лучший ответ
`
SELECT b.ID_B, 
        b.ID_C, 
        b.info, 
        COALESCE(a.status, 'Default') AS status
 FROM tabelB AS b
 LEFT JOIN tabelA AS a ON a.ID_B = b.ID_B
 WHERE b.ID_C = 123;

`

0
Ivo P 26 Июн 2017 в 13:21
Почти идеально. Все, что мне нужно было сделать, это добавить ...LEFT JOIN tabelA AS a ON a.ID_B = b.ID_B AND uniqueID=12345678
 – 
user859385
26 Июн 2017 в 13:44