gpt4 book ai didi

mysql - 在多个表中进行 SELECT

转载 作者:行者123 更新时间:2023-11-29 13:18:33 24 4
gpt4 key购买 nike

我有这 3 个表:

POST [id_post, url]
CAT [id_cat, name]
POST_CAT [id_post, id_cat]

我有 10-15 个类别,每个类别有 100-200 个 url,但问题是 url 可以有多个类别,那么...我想用 1 个 url 显示所有类别,但该 url 可以不显示在其他类别中

我该怎么办?

我有这个 SQL,但显然没有做我想要的事情:

SELECT c.nombre, p.url 
FROM post_cat pc, posts p, categorias c
WHERE pc.id_post = p.id_post
AND c.id = pc.id_cat
GROUP BY pc.id_cat

谢谢你,很抱歉我的英语不好!

-----------------------------------------------------

Data (Example): 

CAT 1 - URL1, URL2
CAT 2 - URL1, URL2
CAT 3 - URL2, URL3
CAT 4 - URL1, URL2

这显示了什么:

CAT1 - URL1
CAT2 - URL2
CAT3 - URL3

CAT4 - URL1(因为 URL1 和 URL2 显示在其他类别中...如果重复或不重复,则显示其中 1 个独立的类别)

最佳答案

如果我理解正确的话,您需要每个类别都有一个唯一的 url,其中该 url 没有其他类别。不幸的是,SQL 中没有对此问题有保证的解决方案。但你可以接近。

第一件事是为每个 url 选择任意类别:

select p.url, min(pc.id_cat) as id_cat
FROM post_cat pc join
posts p
on pc.id_post = p.id_post
GROUP BY p.url
HAVING count(*) = 1;

having 子句保证 url 只有一个类别。

接下来,您要为每个类别选择其中之一:

select id_cat, min(url) as url
from (select p.url, min(pc.id_cat) as id_cat
FROM post_cat pc join
posts p
on pc.id_post = p.id_post
GROUP BY p.url
HAVING count(*) = 1
group by id_cat;

如果您需要其他类别信息(例如名称),请加入类别表。 )p

关于mysql - 在多个表中进行 SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21175703/

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