gpt4 book ai didi

mysql - 与 AND NOT 在 MySql 中的问题

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

我是 SQL 新手,正在开发 PHP+MySql 应用程序。应用程序使用的数据库有很多表,例如 swverforftver:

SWVerID  FileTypeVerID
1111 897897
1111 32352342
2222 897897
2222 32352342
2222 222222222
3333 222222222

和表文件类型版本:

FileTypeVerID      PubID       FileTypeID      IsRelatedTo    IsPreviousVersionOf
897897 789789798 6575 dw qweq
32352342 68767 231232 dasdasda asdasda
222222222 333333 231231 asd wdadw

和表格软件版本:

SWVerID  SWID    Name
1111 1234 Adobe Reader
2222 5678 Word
3333 4444 ExcelVersion

我正在使用 SQL 命令从与 FileTypeVerID 897897 值关联的软件版本表中检索 SWVerID 值,并且这些值与 swverforftver 中的 222222222 值无关表。

我使用的命令如下:

SELECT  distinct softwareversion.SWVerID 
FROM softwareversion,
filetypeversion,
swverforftver AS stv JOIN
swverforftver AS stv2 ON stv2.SWVerID = stv.SWVerID
WHERE stv2.FileTypeVerID=filetypeversion.FileTypeVerID
AND stv.SWVerID=softwareversion.SWVerID
AND (stv2.FileTypeVerID = 897897)
AND NOT (stv.FileTypeVerID = 222222222)

它没有只返回 1111 值,它是唯一与 897897 而不是 222222222 关联的值,而是返回一个包含两个值的表:

SWVerID
1111
2222

有人知道这个问题吗?此外,SQL 命令不应在当前命令的结构中进行修改(基本上应该具有 JOIN 和 AS)...

最佳答案

您得到结果集中的第二行,因为存在 3 行 SWVerID = 2222,因此条件被评估为真。改用 NOT IN:

SELECT  distinct softwareversion.SWVerID 
FROM softwareversion,
filetypeversion,
swverforftver AS stv
WHERE stv2.FileTypeVerID=filetypeversion.FileTypeVerID
AND stv.SWVerID=softwareversion.SWVerID
AND (stv2.FileTypeVerID = 897897)
AND NOT EXISTS (select null from swverforftver AS stv2 WHERE stv2.SWVerID = stv.SWVerID AND
stv2.FileTypeVerID = 222222222)

关于mysql - 与 AND NOT 在 MySql 中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5992231/

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