gpt4 book ai didi

mysql - SELECT、JOIN 和 WHERE != 语句返回太多行

转载 作者:行者123 更新时间:2023-11-29 06:45:21 25 4
gpt4 key购买 nike

试图让一个棘手的 mysql select 语句工作 - 我需要一些帮助来冷却我燃烧的头脑......我有一种感觉,你们中的一位 MYSQL 英雄会看到这个并把它卷起来。

目标:列出不属于给定类别的给定用户的歌曲。

三张表::表 1:歌曲,许多字段分配有 UserID,以及唯一的 SongID

表 2:类别,3 个以上的字段,具有分配的 UserID 和唯一的 CatID

表 3:链接器,一对多,用于在一个或多个类别中列出歌曲。 3个字段,unique id (index), SongID, CatID

以下让我很接近 - 但没有列出用户的歌曲,这些歌曲根本没有分配给任何其他类别,或者已经分配给另一个类别(我想感谢 !=)。

SELECT DISTINCT song.SongName, song.UserID, song.SongID  FROM song  
JOIN linker ON song.SongID = linker.SongID
WHERE linker.CatID != 155 AND song.UserID =2

然后,我试了一下,

SELECT DISTINCT song.SongName, song.UserID, song.SongID FROM song 
LEFT JOIN linker ON song.SongID = linker.SongID
WHERE (linker.SongID IS NULL OR linker.CatID != 155) AND song.UserID =2

更接近但不工作(仍然感谢 != 包括已分配的歌曲)。

我想我可以在不调用表 2 的情况下逃脱,因为它只是为给定用户添加和定义类别。或者,我正在考虑获取所有用户的歌曲,然后使用给定的 CatID 取消设置数组值 - 但这似乎没有必要?我觉得我缺少一些简单的东西?如果绝对需要更改表结构,此时它并不神圣。感谢任何分享他们想法的人。

最佳答案

试试这个(我习惯了 MSSQL,所以如果我的语法不对,提前道歉):

SELECT s.SongName, s.UserID, s.SongID
FROM song s
LEFT JOIN linker l on s.SongID = l.SongID AND l.CatID = 155
WHERE s.UserID = 2
AND l.ID is null

关于mysql - SELECT、JOIN 和 WHERE != 语句返回太多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18965122/

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