Mysql ссылается на тот же столбец из таблицы 1 в качестве внешнего ключа на два столбца в таблице два - PullRequest
0 голосов
/ 01 октября 2018

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

1-е Имя таблицы: древовидная структура

+----+-----------+-----------+-----------+
| id | name      | text      | parent_id |
+----+-----------+-----------+-----------+
|  1 | BrandTree | BrandTree | 0         |
|  2 | TShirt    | TShirt    | 1         |
|  3 | ManForce  | ManForce  | 2         |
|  4 | PayTM     | PayTM     | 2         |
+----+-----------+-----------+-----------+

Я использую эту таблицу для создания jstree.Моя вторая таблица выглядит следующим образом:

Имя 2-й таблицы: annotations:

+--------+-------------------------------------+--------------+-----------+
| ann_id | imagename                           | locationName | brandname |
+--------+-------------------------------------+--------------+-----------+
|      1 | 95-20180527-190018-205342-00002.jpg |            2 |         3 |
|      2 | 95-20180527-190018-205342-00005.jpg |            2 |         4 |
+--------+-------------------------------------+--------------+-----------+

Во второй таблице locationName и brandname имеют ссылки внешнего ключа на первый столбец идентификатора таблицы.Я использую следующий код для извлечения таблицы:

select annotations.imagename, treeview.name, treeview.text 
from annotations 
inner join treeview on treeview.id = annotations.locationName 
and inner join treeview on treeview.id = annotations.brandname;

Приведенный выше код обеспечивает пустой набор.

Можно ли получить столбец идентификатора из таблицы 1 в качестве внешнего ключа для двух столбцов вТаблица 2?Как мне получить в этом случае?

Ответы [ 4 ]

0 голосов
/ 01 октября 2018

Выберите a.imagename, t1.name, t2.name из аннотаций a, древовидную структуру t1, древовидную структуру t2, где a.locationName = t1.id && a.brandname = t2.id;

0 голосов
/ 01 октября 2018

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

    select annotations.imagename, tv1.name, tv1.text, t2.name, tv2.text
    from annotations 
    inner join treeview tv1 on tv1.id = annotations.locationName 
    inner join treeview tv2  on tv2.id = annotations.brandname;
0 голосов
/ 01 октября 2018

Вы должны использовать разные псевдонимы для таблиц treeview, которые вы использовали дважды.И не требуется and до inner join....

Запрос

select `t1`.`imagename`, `t2`.`name`, `t3`.`text`
from `annotations` as `t1` 
inner join `treeview` as `t2`
on `t2`.`id` = `t1`.`locationName`
inner join `treeview` as `t3` 
on `t3`.`id` = `t1`.`brandname`;

Найти демо здесь

0 голосов
/ 01 октября 2018

Это делает одно соединение, дважды

select annotations.imagename, tv1.name, tv2.name 
from annotations 
inner join treeview tv1 on tv1.id = annotations.locationName 
inner join treeview tv2 on tv2.id = annotations.brandname;

Я думаю, MySQL не пригодится

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...