我有两个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中两列的外键吗?在这种情况下,我该如何获取?
答案 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`;