SQL子查询结果在何处

SQL子查询结果在何处,sql,subquery,concatenation,Sql,Subquery,Concatenation,我有一个Paths表,其中包含PathID unique和PathStr列 我想获取此表中所有以字符串开头的PathStr记录,这些记录来自选定的PathID 换句话说,如果我知道根文件夹的路径ID,我希望获得文件夹的所有子文件夹 示例表: PathID | PathStr -------+------------------------ 1 | D:\Project1 2 | D:\Project1\Sub1 3 | D:\Project1\Sub1\

我有一个Paths表,其中包含PathID unique和PathStr列

我想获取此表中所有以字符串开头的PathStr记录,这些记录来自选定的PathID

换句话说,如果我知道根文件夹的路径ID,我希望获得文件夹的所有子文件夹

示例表:

PathID | PathStr
-------+------------------------
   1   |  D:\Project1
   2   |  D:\Project1\Sub1   
   3   |  D:\Project1\Sub1\Sub11
   4   |  D:\Project2
   5   |  D:\Project2\Sub1
如果PathID=1,则为必需结果:

我的查询现在看起来是这样的,但我一直使用子查询,其中:

我想我不能简单地将子查询的结果与字符串连接起来,但我不知道该怎么做,我没有与我的朋友google找到解决方案:

子查询的结果总是一条记录


谢谢

我建议改用exists:

您尚未标记数据库。字符串连接的标准运算符是| |,许多数据库也支持CONCAT函数。使用+进行字符串连接是非常有限的

编辑:

要解决评论中提到的问题,请执行以下操作:

SELECT p.PathStr as Folder
FROM Paths p
WHERE EXISTS (SELECT 1
              FROM Paths p2 
              WHERE p2.PathId = 1 AND
                    CONCAT(p.PathStr, '\') LIKE CONCAT(p2.PathStr, '\%')
             );

注意:在某些数据库中,反斜杠需要加倍,因此它不是转义字符。

用您正在使用的数据库标记您的问题。@GordonLinoff不幸的是,我不知道:/那么,您的查询是否有效?如果没有,您是否会收到错误?哪一个顺便说一句,你把引语弄糊涂了。在标准SQL中,单引号用于“%”之类的字符串,双引号用于文件夹之类的名称。标准字符串连接运算符是| |,而不是+,但某些DBMS SQL Server是最突出的用法+。其他人仍然使用CONCAT函数。你不知道你在使用哪个DBMS?您不知道您是在使用Oracle还是MySQL或SQL Server之类的工具?那么,您如何知道哪些操作和功能可用,以及参考哪些手册或在线文档?如何连接到数据库?@ThorstenKettner这是一个项目数据管理软件。我是一个用户,不是管理员或IT人员,但我可以运行称为报告的查询。不幸的是,它的文档很差。小心。正如forpas在其现已删除的答案中指出的那样,“D:\Project123\Sub1”将被视为具有此类查询的“D:\Project1”的子文件夹。您可能希望使此CONCATp2.PathStr“\%”与CONCATp2.PathStr“\%”类似。
SELECT P.PathStr As 'Folder'
FROM Paths AS P
WHERE P.PathStr LIKE (SELECT Paths.PathStr FROM Paths WHERE Paths.PathID = 1) + "%"
SELECT p.PathStr as Folder
FROM Paths p
WHERE EXISTS (SELECT 1
              FROM Paths p2 
              WHERE p2.PathId = 1 AND
                    p.PathStr LIKE CONCAT(p2.PathStr, '%')
             );
SELECT p.PathStr as Folder
FROM Paths p
WHERE EXISTS (SELECT 1
              FROM Paths p2 
              WHERE p2.PathId = 1 AND
                    CONCAT(p.PathStr, '\') LIKE CONCAT(p2.PathStr, '\%')
             );