Вставка в таблицу пересечений ссылки на внешний ключ - PullRequest
0 голосов
/ 09 марта 2012

Prop PropID PropDescription

Отношение ко многим ко многим

Изображение ImageID ImageDescription

Image_has_Prop Prop_PropID Image_ImageID

В моем приложении мне нужно вставить данные в Image_has_Prop . Пользователь вводит в ImageId, а затем выбирает Prop из JComboBox, который отображает поле PropDescription. Я пытаюсь выяснить, как связать описание с его внешним ключом, возможно ли это вообще? Потому что я полагаю, что PropDescription может быть не уникальным. Ниже моя попытка, я думаю, что, если честно, я использую базу данных mysql.

INSERT INTO Image_has_Prop 
(Image_ImageID, Prop_PropID)
VALUES
(Select ImageID FRom Image where ImageID ='1', SELECT PropId FROM Prop Where PropDescription = 'Tablets');

1 Ответ

1 голос
/ 09 марта 2012
INSERT INTO Image_has_Prop (Image_ImageID, Prop_PropID)
SELECT 1, PropID
  FROM Prop
 WHERE PropDescription = 'Tablets';

Вы уже знаете нужный идентификатор изображения, поэтому нет необходимости запрашивать его. При необходимости вы можете выполнить подзапрос (измените «1» на «(ВЫБЕРИТЕ ImageID ИЗ ИЗОБРАЖЕНИЯ, ГДЕ ImageID = 1)»). Это будет выглядеть примерно так:

INSERT INTO Image_has_Prop (Image_ImageID, Prop_PropID)
SELECT ( SELECT ImageID FROM Image WHERE ImageID = 1 ), PropID
  FROM Prop
 WHERE PropDescription = 'Tablets';

Или вы можете сделать перекрестное соединение, так как вы получаете по одной строке от каждой таблицы:

INSERT INTO Image_has_Prop (Image_ImageID, Prop_PropID)
SELECT i.ImageID, p.PropID
  FROM Image i, Prop p
 WHERE i.ImageID = 1
   AND p.PropDescription = 'Tablets';
...