SQL查询结果需要返回WHERE子句中的所有记录,甚至重复

时间:2016-04-22 18:08:47

标签: sql sql-server

我是Microsoft SQL Server的新手,需要一个查询来返回WHERE子句中列出的所有记录,甚至是重复的。我所拥有的只会返回3行。

我正在阅读并使用c#解析文本文件。使用该文本文件,我创建一个查询以从数据库获取结果,然后使用结果重建该文本文件。原始文本文件包含重复的行。每行都需要与从数据库中检索的数据相关联。 -

SELECT tbl1.HdrCode, tbl1.HdrName
FROM Table1 tbl1
WHERE tbl1.HdrCode 
IN ('000520',
'000531',
'000531',
'000636')

我需要的是:

000520  Name1
000531  Name2
000531  Name2  
000636  Name3   

谢谢

3 个答案:

答案 0 :(得分:2)

尝试这样的事情

您需要一个包含值的内联表,JOIN与您的表而不是IN子句

SELECT tb1.* 
FROM   (VALUES ('000520'), 
               ('000531'), 
               ('000531'), 
               ('000636')) tc (hdrcode ) 
       JOIN table1 tbl1 
         ON tc.hdrcode = tb1.hdrcode 

答案 1 :(得分:1)

这不是SQL中的工作方式。查询只返回那里的内容。如果您的表中只有3行,并且其中只有一行有 String task = "distance: Dallas, New York City"; System.out.println(task.split(":|,")[0]);// return "distance" System.out.println(task.split(":|,")[1]);// return " Dallas" System.out.println(task.split(":|,")[2]);// return " New York City" ,则该类查询只会返回一行。

如果您只想解决此具体示例,可以使用:

HdrCode 000531

答案 2 :(得分:0)

您需要UNION ALL子句来指定两个选项。 在你的例子中,你需要这样的东西:

SELECT tbl1.HdrCode, tbl1.HdrName
FROM Table1 tbl1
WHERE tbl1.HdrCode 
IN ('000520','000531','000636')
UNION ALL
SELECT tbl1.HdrCode, tbl1.HdrName
FROM Table1 tbl1
WHERE tbl1.HdrCode 
IN ('000531')
ORDER BY HdrCode

这是SqlFiddle

但如前所述,你应该考虑一下这里的全貌;不仅仅是您的示例,因为此示例的解决方案可能无法满足您查询的真正目的。