gpt4 book ai didi

mysql - 从 3 个表进行大查询

转载 作者:行者123 更新时间:2023-12-01 00:01:08 25 4
gpt4 key购买 nike

我有三个表

profiles (id, name, deleted)
categories (id, name, deleted)
profiles_categories (id, profile_id, category_id, , deleted)

如何选择类别中所有带有 nameprofiles

我正在尝试类似的方法,但它不起作用...

SELECT * 
FROM profiles p
JOIN categories c, profiles_categories pc
WHERE p.id = pc.profile_id
AND WHERE pc.id = c.category_id

谢谢

编辑

SELECT *
FROM profiles p
INNER JOIN profiles_categories pc
ON p.id = pc.profile_id
INNER JOIN categories c
ON pc.id = c.id

它只返回一个配置文件(现在只有两个事件的配置文件,但只有第一个有类别)

最佳答案

您当前的查询有几个问题。

首先,您要混合连接类型。您应该在所有表之间使用 ANSI JOIN 语法。不要将 ANSI JOIN 语法与某些表混合使用,然后在其他表之间使用逗号。

其次,您有两个 WHERE 子句并且您只能有一个 WHERE 子句。

最后,您应该包含要返回的列名,而不是 SELECT *

查询应该类似于这样:

SELECT p.name, c.name
FROM profiles p
INNER JOIN profiles_categories pc
ON p.id = pc.profile_id
INNER JOIN categories c
ON pc.id = c.category_id

表之间的 INNER JOIN 将返回所有表中存在的所有行。

请注意,根据您的表结构,您可以使用以下命令返回在 profiles_categories 表中具有相应行的配置文件:

select p.name
from profiles p
where p.id in (select profile_id
from profiles_categories);

编辑你想返回所有的profile不管有没有category,那么你需要用一个LEFT JOIN:

SELECT p.name, c.name
FROM profiles p
LEFT JOIN profiles_categories pc
ON p.id = pc.profile_id
LEFT JOIN categories c
ON pc.id = c.category_id

关于mysql - 从 3 个表进行大查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17373547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com