mysql内部连接与不同的表

时间:2012-05-28 14:08:14

标签: mysql join inner-join

谢谢大家:)我有4个表项目,点,步骤和评论;

项目 ID 名称 降序

ID 名称 降序 PROJECT_ID

步骤 ID 降序 points_id

评论 ID 降序 steps_id

我写了这样的查询

SELECT * FROM Project 
INNER JOIN points ON points.project_id=Project.id
INNER JOIN steps ON steps.points_id=points.id
INNER JOIN comments ON comments.steps_id=steps.id
WHERE Project.id=333

一个项目有很多要点,要点,有很多步骤,并且有很多评论 这样的事情,我想在一个查询中获得所有结果,否则需要花费大量时间才能得到结果:((我不知道我能做些什么:((

就像这样

**Project**
id :1,
name :"get",

**points**
id :1,
name :"points1", ///project "get"'s point
project_id : 1,
id :2,
name :"points2", ///project "get"'s point
project_id : 1,

**steps**
id :1,
name :"steps1", ///project "points2"'s step
points_id : 2,
id :2,
name :"steps2",///project "points2"'s step
points_id : 2,

**comments**
id :1,
name :"something", ///project "steps1"'s comment
steps_id : 1,
id :2,
name :"something",///project "steps2"'s comment
steps_id : 2,

我想在一个查询中回应项目,指点,步骤和步骤的评论,或者是否有其他方法可以解决这个问题?感谢支持:)))))))

4 个答案:

答案 0 :(得分:2)

首先,您的sql语法无效。您错过了关键字FROM。它应该是:

SELECT * 
FROM Table1
       INNER JOIN table2 ON table2.table1_id= table1.id
       INNER JOIN table3 ON table3.table2_id= table2.id
       INNER JOIN table4 ON table4.table3_id= table3.id
WHERE table1.ID = 333

但我需要你想要的结果。您需要指定数据库架构和虚拟记录以完成查询。

答案 1 :(得分:1)

您发布的查询中缺少一些内容:

  1. 缺少FROM条款
  2. 此外,每个联接都不正确,如table2.table1_id= table1.id ......它应该是 table2.table2_id= table1.id(除非你的桌面设计是这样的)
  3. 因此,最终您的查询应该看起来像

    SELECT *  FROM Table1        
    INNER JOIN table2 ON table2.table2_id= table1.id        
    INNER JOIN table3 ON table3.table2_id= table1.id        
    INNER JOIN table4 ON table4.table4_id= table1.id 
    WHERE table1.ID = 333 
    

答案 2 :(得分:0)

您当前正在通过使用值333过滤ID来检索Table1中的所有列。那么来自其他表的其他列呢?你期待什么样的调整?

答案 3 :(得分:0)

最后一次INNER JOIN中有一个拼写错误。 table2应该是table4。