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 = ?;
我从两个 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 = ?;