gpt4 book ai didi

mysql - 更好的子查询方式

转载 作者:可可西里 更新时间:2023-11-01 06:51:34 25 4
gpt4 key购买 nike

我有一个数据库,其中 article 表与其自身具有多对多关系(通过 article_rel)并且 articles 具有 类型。 parent 的类型为 1234,而 child 可以是几种类型之一。

我正在努力寻找以下两种情况之一的 parent : 没有 child ;或者,如果他们有 child ,则最近的子文章不是特定类型的集合。

以下内容对于第二部分来说工作得相当好,但没有解决第一部分。我为提取子查询以便引用它返回的值(添加“or is null”)所做的每一次尝试都失败了。我也想知道是否有更好的方法来写这样的东西。

SELECT 
CONCAT('http://www.sitename.com/', n.id, '.html') as URL,
n.added,
u.email,
n.body
#c.body
FROM
warehouse.article n
inner join site.user u on n.user_id = u.id
inner join warehouse.article_param np on np.id = n.id and np.param_name = 'ready' and np.param_value = 'true'
where
n.type_id = 1234
and
(select
c.type_id
from
warehouse.article c,
warehouse.article_rel r
where
r.child_nid = c.id
and r.parent_nid = n.id
order by
c.added desc
limit 1)
not in (2245,5443)
order by
n.updated desc

最佳答案

您应该能够使用 MAX(added) 来查找最新添加的 child 。派生表 x 找到父级 n.id 的最新添加的 child 的日期(如果该部分对您没有意义,请参阅 this)。然后 t 找到关于那个最新添加的 child 的数据。我使用左连接来获取 n.id 的最新添加的子项,因为如果没有子项,那么它将在子项的位置留下一个空值,从而为您提供所有没有子项的文章。

SELECT n.added, CONCAT('http://www.sitename.com/', n.id, '.html') as URL,
u.email, n.body #c.body
FROM warehouse.article n
inner join site.user u on n.user_id = u.id
inner join warehouse.article_param np on np.id = n.id and np.param_name = 'ready' and np.param_value = 'true'
left join (SELECT r.parent_nid, MAX(added) as latest
FROM warehouse.article c
INNER JOIN warehouse.article_rel r on c.id = r.child_nid
GROUP BY r.parent_nid) as x on x.parent_nid = n.id
left join warehouse.article t on t.added = x.latest
where n.type_id = 1234 and (t.type_id is null or t.type_id not in (2245,5443))
order by n.updated desc

如果有可能有多篇文章具有完全相同的添加日期,那么您必须使用 t 的派生表来检查出处:

left join (SELECT c.type_id, c.id, c.added, r.parent_nid
FROM warehouse.article c
INNER JOIN warehouse.article_rel r on c.id = r.child_nid)
as t on t.parent_nid = n.id and t.added = x.latest

关于mysql - 更好的子查询方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10493728/

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