Как я могу получить только один результат? SQL: CASE возвращает две строки

У меня есть две таблицы с информацией об автомобилях, чтобы определить, какой у них тип двигателя. Поэтому мне нужна вторая таблица, где указана вся спецтехника автомобиля. В Таблице 1 различаются режимы «Батарея» и «Без батареи». С помощью ключа специального оборудования из таблицы 2 можно определить, являются ли автомобили «без аккумулятора» гибридами или автомобилями с двигателем внутреннего сгорания. Если у них есть ключ специального оборудования «ABC», это гибридные автомобили. Если нет, то это автомобили внутреннего сгорания.

Таблица 1:

> ID    |Car    |Engine      |
> 1     |RED    |BATTERY     |  
> 2     |YELLOW |NO-BATTERY  |
> 3     |BLUE   |NO-BATTERY  |  

Таблица 2:

-ID-|SPECIAL EQUIPMENT
1   |AAA
1   |BBB
1   |CCC
2   |ABC
2   |BBB
2   |CCC
3   |ABC
3   |BBB
3   |CCC

SQL-запрос:

SELECT DISTINCT    mytable.id, mytable.car, mytable.engine
FROM
    (SELECT table1.id, table1.car, table1.engine, table1.type,
    
    CASE    WHEN table1.type = 'Battery'    THEN 'BEV'
            WHEN table1.type = 'No-Battery'     THEN (CASE   WHEN special Equipment = 'ABC' THEN 'HYBRID' 
                                                      ELSE 'COMBUSTION' END)                                               
    END AS engine
    
    FROM table1
    INNER JOIN table 2 key ON table1.id = table2.id  
    WHERE (cars.id = 2 )  
)t;

Код SQL возвращает для CAR ID 2 --> 2 столбца, один раз для типа двигателя Hybrid и один раз для двигателя внутреннего сгорания.

РЕЗУЛЬТАТ (текущий):

> ID    |Car    |type        |engine
> 2     |YELLOW |NO-BATTERY  |HYBRID    
> 2     |YELLOW |NO- BATTERY |COMBUSTION

Я ХОЧУ ПОКАЗАТЬ:

> ID    |Car    |type        |engine
> 2     |YELLOW |NO-BATTERY  |HYBRID    

Результат с горением неправильный, но отображается ... как я могу просто получить один правильный результат?

Может ли это быть внутренним соединением? stackoverflow.com/questions/12526194/… что-то в этом направлении?

JulianBPL 11.12.2020 10:27
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
93
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я думаю, проблема в том, что вы просите

SELECT DISTINCT    mytable.id, mytable.car, mytable.engine

Когда вы хотите показать только отдельный mytable.car

В результатах есть два разных mytable.engine, которые показывают, что они оба разные.

SELECT DISTINCT    mytable.car

Я мало знаю о JQL

Ответ принят как подходящий

Я думаю, вы просто хотите exists:

select t1.*,
       (case when exists (select 1
                          from table2 t2
                          where t2.id = t1.id and t2.special = 'ABC'
                         )
             then 'Hybrid' else 'Combustion'
        end) as engine
from table1 t1;

Другие вопросы по теме