如果我像这样运行查询:
SELECT DISTINCT fileName
FROM files
WHERE fileID IN (2,3,4,5)
它提供4行结果:
file2的
file3的
file4将
file5
并且,以下查询提供了fileid
SELECT fileID
FROM folders
WHERE folderID = 61
结果是:2,3,4,5
有人可以帮我找出为什么我没有得到与第一次查询相同的结果吗?
SELECT DISTINCT fileName
FROM files
WHERE fileID IN (
SELECT fileID
FROM folders
WHERE folderID = 61
)
结果是:file2
屏幕截图:https://imgur.com/a/iY6pc
先谢谢你!
答案 0 :(得分:1)
您的agents.DriveID
列包含逗号分隔的字符串。这是一个糟糕的设计,WHERE .. IN (subquery)
将无效。您必须使用FIND_IN_SET
代替。但这会导致表现不佳:
SELECT DISTINCT `Name`
FROM MasterGroups
WHERE FIND_IN_SET(GroupID, (SELECT DriveID FROM agents WHERE agents.AgentID = 61076))
答案 1 :(得分:0)
您有一个表files
的列ID,并且您有一个表folders
的ID列,您的问题很简单。您正在将一个表中的一个ID与另一个表的ID进行比较。
正确的方法是:
SELECT DISTINCT fileName
FROM files
WHERE folderID IN -- HERE THE COLUMN YOU SHOULD CHANGE
(SELECT fileID FROM folders WHERE folderID=61)
其中folderID
是一个可能是FK到folders
表的列。当然,这取决于您的files
表格结构。
为确保您只是比较错误的列,只需为两个表运行select * from ...
,您就会看到差异。
答案 2 :(得分:0)
我在最后复制数据并获得预期结果。
SELECT DISTINCT fileName FROM files WHERE fileID IN (2,3,4,5)
输出: - 文件2 文件3 文件4 file5
SELECT fileID FROM folders WHERE folderID =61
<强>输出:强> 2 3 4 5
SELECT DISTINCT fileName FROM files WHERE fileID IN (SELECT fileID FROM folders WHERE folderID =61)
<强>输出:强> 文件2 文件3 文件4 file5