Mysql将表1中的同一列作为外键引用到表2中的两列

时间:2018-10-01 11:46:33

标签: mysql foreign-keys

我有两个mysql表,第二个具有对第一个的外键引用。第一个表如下:

第一个表名称:treeview

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

我正在使用此表生成jstree。而我的第二张表如下:

第二个表名称:批注:

+--------+-------------------------------------+--------------+-----------+
| 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具有对第一个表id列的外键引用。我正在使用以下代码来检索表:

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中的id列用作表2中两列的外键吗?在这种情况下,我该如何获取?

4 个答案:

答案 0 :(得分:6)

从注释a,treeview t1,treeview t2中选择一个图像名称,t1.name,t2.name,其中a.locationName = t1.id && a.brandname = t2.id;

答案 1 :(得分:1)

那是一次加入,两次

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

答案 2 :(得分:1)

您应该对树视图表使用两个联接,每个联接引用表注释的列都必须一个

    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;

答案 3 :(得分:0)

对于两次使用的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`;

Find a demo here