mySQL 多个内部联接

mySQL multiple inner joins

我从两个 table 中提取信息。

假设 table1 有以下列 (id, title, category, sub_category, sub_sub_category)

假设 table2 有以下列 (category_id, category_name)

我有一个 select 声明,目前看起来如下:

SELECT
  table1.id,
  table1.title,
  table2.category_name as Cat1,
  table2.category_name as Cat2,
  table2.category_name as Cat3
FROM
  table1,
  table2
INNER JOIN table2 as c1 ON c1.category_id = table1.category
INNER JOIN table2 as c2 ON c2.category_id = table1.sub_category
INNER JOIN table2 as c3 ON c3.category_id = table1.sub_sub_category
WHERE
  table1.id = ?

这给我一个关于 table1.category 是未知列的错误

我也试过了

SELECT
  table1.id,
  table1.title,
  table2.category_name as Cat1,
  table2.category_name as Cat2,
  table2.category_name as Cat3
FROM
  table1,
  table2
WHERE table1.id = ?
AND   table1.category = table2.category_id
AND   table1.sub_category = table2.category_id
AND   table1.sub_sub_category = table2.category_id

最后一个例子至少给了我正在寻找的列输出

(table1.id, table1.title, table1.category 姓名, table1.sub_category 姓名...)

因此显示 table 2 中的类别名称而不是 ID。我是一名业余编码员,以前不必使用内部联接,但也许这就是我需要做的。我只是不知道如何让它输出我需要的数据。

提前感谢您的时间和考虑。

Ups,你这里有几个问题。 第一个 table2 只能有一个名为 category_name 的列,所以没有理由像你那样 select 它三次,结果将是你有三个完全相同的列,但不同名字.

其次语法完全错误。 INNER JOIN 的语法是

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;

您还需要在两个 table 中都有列,通常是外键,并且该列将用于匹配数据。我猜你的情况应该是 category_id 来自第二个 table 和第一个 table 那是你命名为类别的列(它应该重命名为 category_id 它更方便)。 ..

因此,如果理解正确,您想要 select 第一个 table 的 ID、标题和第二个 category_name 的标题,您可以这样做:

SELECT table1.id, table1.title, table2.category_name
FROM table1
INNER JOIN table2
ON table1.category_id = table2.category_id;

给你的友好建议是,在你继续你所做的事情之前,先找到一些在线资源并多了解一些这方面的知识……

您的问题是 from 子句中有一个逗号。简单规则:永远不要在 from 子句中使用逗号。始终使用明确的 join 语法。

然后,您还 table2 提到了额外的时间,并且您的 select 正在从错误的 table2 实例中提取列。

修复后的查询如下所示:

SELECT t1.id, t1.title,
       c1.category_name as Cat1, c2.category_name as Cat2,
       c3.category_name as Cat3
FROM table1 t1 INNER JOIN
     table2 c1
     ON c1.category_id = t1.category INNER JOIN
     table2 c2
     ON c2.category_id = t1.sub_category INNER JOIN
     table2 c3
     ON c3.category_id = t1.sub_sub_category
WHERE t1.id = ?;