gpt4 book ai didi

mysql - 如何加入这个查询?

转载 作者:行者123 更新时间:2023-11-29 06:38:26 24 4
gpt4 key购买 nike

我有两个表:

主题、文章和发现

Topics 表中我有:'id', 'title'Articles 表中,我有:'id', 'title'Discover 表中,我有:'id'、'itemId'、'itemType'、'hOrder'

Discover 表中,我几乎想在 itemId 中存储 TopicArticle 的 ID >。在 itemType 中,我会有一个“p”或一个“a”,具体取决于它是什么(分别是主题或文章)。

我的问题是当我尝试提取值时。我想创建一个 JOIN 来获得所有 Topics,如果该主题在 Discover 表中,它会给我 hOrder.

我试过这样做

SELECT *
FROM playlists p
LEFT JOIN homepage_discover h
ON p.id = h.itemId
WHERE h.itemType = 'p'

我尝试了 INNER、LEFT、RIGHT 连接,但没有一个是我想要的。那会是什么类型的 JOIN?谢谢!

最佳答案

使用外连接时,where 子句的值必须只与包含要返回的所有记录的表相关。否则,您会限制外连接所需的空值。这可以通过在 where 子句中使用“and is null notation”或“将限制条件添加到连接本身”来实现。

之所以可行,是因为连接中的执行顺序和生成的笛卡尔乘积。当系统将 T 连接到 D 时,它会排除任何项目类型不是 p 的东西。然后执行外部连接,从而不会从主题中删除记录。当这在 where 子句中完成时,连接已经发生,因此所有记录都针对 itemtype p 进行评估。其中一些将为 NULL 因此被排除,消除了外部连接,因此为什么使用 or is null 有效!

SELECT *
FROM Topics T
LEFT JOIN Discover D
on T.ID = D.itemID and d.itemType = 'p'

SELECT *
FROM Topics T
LEFT JOIN Discover D
on T.ID = D.itemID
WHERE (D.itemType = 'p' or D.itemType is null)

关于mysql - 如何加入这个查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23021164/

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