作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我是 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/
我是一名优秀的程序员,十分优秀!