联接四个表

时间:2018-08-16 04:01:31

标签: mysql sql

我查看并尝试了各种示例,但仍未获得所需的结果。

有一个名为“ item”的表,该表包含有关媒体(书籍,视频,mp3等的元数据)

和带有视频URL的表格“ item_format”

和带有“类别”的表格

以及与“ categories_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 

我无法到达一垒

“字段列表” #line 1中的未知列“ item.title”

2 个答案:

答案 0 :(得分:1)

提供别名后,您必须提供别名:

查看是否有效

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;

答案 1 :(得分:1)

您的查询还可以,但是需要一些小的更改。您使用表别名。在第一行中,仅使用表别名而不是表名

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