MYSQL - 使用In选择In with with number

时间:2017-09-01 19:18:08

标签: mysql

如果我像这样运行查询:

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

先谢谢你!

3 个答案:

答案 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