gpt4 book ai didi

mysql - SQL 在列表 A 中选择但不在列表 B 中

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

正如标题所暗示的,我有两个列表,A 和 B,为了这个问题,我们假设列表 A 是 1,2,3,列表 B 是 4,5 ,6。我的表布局非常简单,仅包含两列 tag_idfile_id。当 tag_id 在列表 A 中但不在列表 B 中时,我想想出一个合理的方法从该表中选择 file_id

这是一组示例数据:

tag_id   file_id
1 10
1 20
3 20
2 30
4 30
6 30

因此,理想的结果是 10、20

通常这对于如下查询来说似乎相当简单:

SELECT `file_id` FROM `file_tags` WHERE `tag_id` IN(%v) AND `tag_id` NOT IN(%v)

(注意:%v 只是将数组扩展为 SQL 的列表)

然而,这将不起作用,因为 file_id 不是唯一的。它总是匹配第一个列表中的某些内容,而第二个列表实际上无关紧要。事后看来,这是有道理的,因为它一次只查看一行,对于简单的方法来说就这么多了。

future 的查询似乎并没有让我走得更远,但为了尝试解决之前尝试的单行范围,我尝试了以下操作:

SELECT `file_id` FROM `file_tags` WHERE `tag_id` IN(%v) AND NOT EXISTS (SELECT `file_id` FROM `file_tags` WHERE `tag_id` IN(%v))

但是,这种方法似乎也不起作用,与前面的示例相比,无论输入如何,它都不会返回任何内容。

这似乎是一个使用 SQL 可以相当简单地解决的问题,但是,我不确定此时如何进行。我可以在程序方面解决这个问题并在返回初始列表后处理数据,但我觉得可能还有更好的纯 SQL 解决方案,我还没有想到。非常感谢任何关于如何进行的建议,谢谢!

最佳答案

也许是这样的?

SELECT DISTINCT `file_id` 
FROM `file_tags`
WHERE `tag_id` IN(1,2,3)
AND `file_id` NOT IN(
SELECT `file_id`
FROM `file_tags`
WHERE `tag_id` IN(4,5,6)
)

基本上说 tag_id 在第一个列表中,而 file_id 不在 tag_id 的第二个列表中

只需将列表值更改为您需要的值即可

SEE DEMO

关于mysql - SQL 在列表 A 中选择但不在列表 B 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24895944/

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