Scribling Doodle Ответов: 2

Как включить столбец другой таблицы в функцию CONCAT


Здравствуйте, ребята, у меня есть таблица, которая должна хранить информацию об автомобиле, касающуюся номерного знака, модели, марки и многих других вещей. Проблема в том, что у меня есть еще одна таблица под названием brand, и в ней есть все возможные марки автомобилей, которые действительно существуют. На столе он вставляет идентификатор бренда вместо имени. Но когда я хочу показать на combobox ("License_plate-Brand-Model-Year_month"), бренд настраивается на идентификатор вместо имени.

Например:

Если я выберу Toyota бренд, идентификатор этого бренда равен 1. Если это так, то таблица будет выглядеть примерно так:

Значения данных, вставленные в таблицу " автомобили`
IDCAR: "1"
Марка: "1" - & gt; упоминается TOYOTA в таблице " бренды`
License_plate: "22-33-объявления"
Модель: "Ярис"
Year_month: "17/05"


Таблицы:

km_carro (в этом разделе упоминается "автомобили")
CREATE TABLE `km_carro` (
  `IDCARRO` int(11) NOT NULL AUTO_INCREMENT,
  `MATRICULA` varchar(50) NOT NULL,
  `ANO_MES` varchar(50) NOT NULL,
  `MODELO` varchar(50) NOT NULL,
  `MARCA` int(11) NOT NULL,
  `OBS` text NOT NULL,
  `COLABORADOR` varchar(250) DEFAULT NULL,
  PRIMARY KEY (`IDCARRO`),
  KEY `FK_MARCA` (`MARCA`),
  KEY `FK_MODELO` (`MODELO`),
  KEY `FK_COLABORADOR` (`COLABORADOR`),
  CONSTRAINT `FK_MARCA` FOREIGN KEY (`MARCA`) REFERENCES `km_marca` (`IDMARCA`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8


km_marca (именуемый " брендами`)
CREATE TABLE `km_marca` (
  `IDMARCA` int(11) NOT NULL AUTO_INCREMENT,
  `NOME` varchar(250) DEFAULT NULL,
  PRIMARY KEY (`IDMARCA`)
) ENGINE=InnoDB AUTO_INCREMENT=69 DEFAULT CHARSET=utf8

Чего я хочу:

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

Что я уже пробовал:

На самом деле я написал этот код на основе другого проекта, который использует ID-Name в combobox, и мне удалось отсортировать его так, как я хочу, но вместо Brand_name он дает мне 'Brand_ID'
da.SelectCommand = New MySqlCommand("SELECT IDCAR, Concat(License_plate ,' - ', Brand, ' - ', Model, '-', Year_month) As 'CAR' from zestagio.cars ", con)
cmbCarro.DataSource = dt
       cmbCarro.DisplayMember = "Carro"
       cmbCarro.ValueMember = "IDCARRO"

2 Ответов

Рейтинг:
8

Scribling Doodle

Что касается @CHiLL60 и его ответа, то проблема заключалась в определении таблиц левого соединения. Если это так, то этот синтаксис должен сделать свою работу.

"SELECT IDCAR, Concat(License_plate ,' - ', Name, ' - ', Model, '-', Year_Month) As 'CAR' from zestagio.car AS C LEFT JOIN zestagio.brand AS B ON C.brand=B.idbrand;"


CHill60

Я предполагаю, что "имя" на самом деле должно быть "ном"

Scribling Doodle

Да, ты прав, приятель, заранее спасибо!

Рейтинг:
19

CHill60

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

.SelectCommand = New MySqlCommand("SELECT IDCAR, Concat(License_plate ,' - ', BrandName, ' - ', Model, '-', Year_month) As 'CAR' from zestagio.cars AS C LEFT JOIN zestagio.brand AS B ON C.Brand=B.Brand;", con)
Я предположил, что внешний ключ в таблице car-это [brand] и ссылки на столбец [brand] в таблице brand, а название бренда находится в столбце [brandname]. Измените эти данные в соответствии с вашими таблицами

[Обновление] - вот полезная статья CodeProject о соединениях Визуальное представление SQL-соединений[^]


Scribling Doodle

Да, именно так, я попробую. Проблема в том, что он показывает идентификатор ценности для бренда, а не настоящее имя. Но я попробую и посмотрю, поможет ли это ;)
Правка: по-прежнему отображается идентификатор бренда, а не название бренда. Но синтаксис Sql работает нормально. Это не просто замена "1" на "Тойоту".

CHill60

Вы должны использовать колонку из brand таблица, содержащая имя, а не идентификатор

Scribling Doodle

Да, верно, именно это я и сделал, у меня просто есть фирменное наименование под названием Name. Я даже изменил последнюю часть на c. brand = b.Name

CHill60

"Я даже изменил последнюю часть на c. brand = b.Name - что?
Разнесите образец записи из таблицы брендов с фактическими именами столбцов

Scribling Doodle

Может быть, вам нужно будет перевести, так как мой стол полностью на португальском...

Я обновлю вопрос с помощью таблиц.
Правка: увидел эту статью и понял, в чем дело. Уже отправил ответ относительно вашего ответа.