Имена строк SQL и флаги строк - PullRequest
1 голос
/ 17 мая 2019

У меня проблемы с пониманием флагов строк.Приведенный ниже вопрос может прояснить его для меня:

Можно ли сохранить имя и его флаг в одной и той же ячейке в SQL?

Рассмотрим:

Если у вас есть таблица, известная как cars со столбцами number_plate, colour и brand_name.brand_name имеет name и flag.

Как хранить это в одном столбце?Если это невозможно или не рекомендуется, объясните, почему и как это сделать.

Как бы вы тогда получили номер cars из данного country (на основе уникального number_plate (первичный ключ)) и страны flag?

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Допустим, name и flag - это два отдельных столбца.Используя функцию concat, они могут быть сохранены в одном столбце с именем brand_name.

select number_plate, colour, concat(name,' ',flag) as brand_name from cars

. Чтобы получить счетчик cars (уникальный), основанный на флаге

select * from 
(select 
 distinct number_plate, 
 colour, 
 concat(name,' ',flag) as brand_name from cars
) a 
where brand_name like '%UK%'

Демо

0 голосов
/ 17 мая 2019

Я думаю вы пытаетесь создать схему, но не совсем освоили внешние ключи.

В вашем примере у вас будут следующие таблицы:

country:
country_id     name      continent
-----------------------------------
1             Germany      Europe
2             Japan         Asia
3            USA         N.America


Brand
Brand_id      name      country_id (foreign key)
---------------------------------------------
1            Mercedes                      1
2            Toyota                        2
3              BMW                         1
4            Chrysler                      3


Car
Number_plate    colour         brand_id
------------------------------------------
xxx-yy-zz         Green               1
aa-bb-cc            Red               1
kkk-l-mmm         Orange              2
....

Чтобы узнать количество автомобилей в зависимости от страны, в которой находится бренд, вы должны сделать что-то вроде:

select country.name, 
            count(*)
from car
inner join brand on car.brand_id = brand.brand_id
inner join country on brand.country_id = country.country_id
group by country.name
...