连接四个表

jljoyd4f  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(276)

我查看并尝试了各种示例,但仍然没有得到我需要的结果。
我们有一个名为“item”的表,其中包含有关媒体(书籍、视频、mp3等)的元数据
以及一个“item\ u format”表格,其中包含视频的url
和带有“类别”的表
以及一个关系到“categories\u item”
我想在我们的youtube视频上找到按类别排序的所有记录。如果你想找“为人父母”,我们会在youtube上找到一个列表和标题。

parenting   https://youtube/v/K8cJKirMo-A     Love is The Tey  
            https://youtube/v/uodqINpEC_w     Discipline  
            https://youtube/v/Ko-ZboCzR64     Become Her Friend

以此类推,列出所有分配的类别
item.media类型,如“%video%”

item
===============
item_id       media_type             title 
1             video/teachings        Discipline
2             video/news             December Update
3             video/landscape        Quad Copter Noni Field

 item_format
=================
item_format_id         item_id         format
1                      2               https://youtube/v/K8cJKirMo-A
2                      4               https://youtube/v/uodqINpEC_w

 category
=================
category_id         item_id      name 
1                      2         parenting     
2                      4         ethics  

  category_item # the bridging table between item/category
=================
category_item_id   category_id  item_id
1                      2           2         
2                      4           3

我尝试过这样的事情,但也有错误,坦白说,我的深度在这里

select item.title, item_format.format
  from item i
    left join item_format if
      on i.item_id = if.item_id
    left join category_item ci
      on i.item_id = ci.item_id
    left join category c
      on ci.category_id = category_id
  where i.media_type LIKE '%video5' 
  order by c.name

我到不了一垒
“字段列表”第1行中的未知列“item.title”

fcg9iug3

fcg9iug31#

你的问题是可以的,但需要一个小的改变。使用表别名。在第一行中,只需使用表别名而不是表名

select i.title, if.format,c.name
from item i
left join item_format if on (i.item_id = if.item_id)
left join category_item ci on (i.item_id = ci.item_id)
left join category c on (ci.category_id = c.category_id)
where i.media_type LIKE '%video5' 
order by c.name
wlsrxk51

wlsrxk512#

提供别名后,必须提供别名:
看看是否有效:

select i.title, if.format,c.name
  from item i
    inner join item_format if
      on i.item_id = if.item_id
    inner join category c
      on i.item_id=c.item_id 
    inner join category_item ci
      on c.category_id=ci.category_id
  where i.media_type LIKE '%video%' 
  order by c.name

或者这个:

select i.title,if.format,c.name
from item i,item_format if,category c, category_item ci
where 
i.item_id=if.item_id and
i.item_id=c.item_id and
c.category_id=ci.category_id
order by c.name;

相关问题