Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择行的次数与SQL Server中的WHERE中提到的次数相同_Sql_Sql Server_Select_Where Clause - Fatal编程技术网

选择行的次数与SQL Server中的WHERE中提到的次数相同

选择行的次数与SQL Server中的WHERE中提到的次数相同,sql,sql-server,select,where-clause,Sql,Sql Server,Select,Where Clause,在我看来,表达我意思的最好方法是举个例子: 我的问题是: SELECT * FROM myTABLE WHERE myColumn IN ('a','b','c','d','a','a','b') ORDER BY myColumn ASC 结果如下: A. B C D 但我希望他们: A. A. A. B B C D 有什么方法可以实现我的目标吗?您需要使用join而不是where子句来实现这一点: 通常,where子句不能增加结果集中的行数。它用于过滤 编辑: 有些人可能认为将交叉应用与v

在我看来,表达我意思的最好方法是举个例子:

我的问题是:

SELECT * FROM myTABLE WHERE myColumn IN ('a','b','c','d','a','a','b') ORDER BY myColumn ASC
结果如下:

A. B C D 但我希望他们:

A. A. A. B B C D
有什么方法可以实现我的目标吗?

您需要使用join而不是where子句来实现这一点:

通常,where子句不能增加结果集中的行数。它用于过滤

编辑:

有些人可能认为将交叉应用与values子句一起使用更容易:

select t.*
from myTable t join
     (values ('a'), ('b'), ('c'), ('d'), ('a'), ('a'), ('b')
     ) vals(val)
     on t.myColumn = vals.val;

我不认为哪一个更简单。更多数据库支持union all表单。

您需要使用join而不是where子句来执行此操作:

通常,where子句不能增加结果集中的行数。它用于过滤

编辑:

有些人可能认为将交叉应用与values子句一起使用更容易:

select t.*
from myTable t join
     (values ('a'), ('b'), ('c'), ('d'), ('a'), ('a'), ('b')
     ) vals(val)
     on t.myColumn = vals.val;

我不认为哪一个更简单。更多数据库支持union all表单。

使用SQL Server时,可以使用值将数据构建为行。然后可以加入到主表,而不是反过来

select
    t.*
from (values
      ('a'), ('b'), ('c'), ('d'), ('a'), ('a') , ('b')
    ) as x(myColumn)
        inner join
    mytable t
        on t.myColumn = x.myColumn
order by
    t.myColumn;
编辑后,这与Gordon的答案相同,只是使用了非标准的值,但更简洁


在使用SQL Server时,可以使用值将数据构建为行。然后可以加入到主表,而不是反过来

select
    t.*
from (values
      ('a'), ('b'), ('c'), ('d'), ('a'), ('a') , ('b')
    ) as x(myColumn)
        inner join
    mytable t
        on t.myColumn = x.myColumn
order by
    t.myColumn;
编辑后,这与Gordon的答案相同,只是使用了非标准的值,但更简洁


@皮特基尔肯斯我不明白你的意思。检查SQL小提琴。啊,我明白了,我没有输出行,只是输出比较的值。@PieterGeerkens没有拖拉,只是因为示例表中没有其他列而感到困惑。@PieterGeerkens我不确定你的意思。检查SQL小提琴。啊,我明白了,我没有输出行,只是输出比较值。@PieterGeerkens没有拖拉,只是因为示例表中没有其他列而感到困惑。我知道何处用于过滤,但不知道如何以其他方式显示我的意思;感谢您的回答,作品中格雷蒂知道哪里是用来过滤的,但不知道如何以其他方式表达我的意思;谢谢你的回答,太好了。你能把答案给戈登吗。他首先正确地理解了本质,我的只是一个语法缩短的东西。我把它给了你们,因为语法对我很重要,它使构建查询变得更加容易和方便。但是,正如你所想,答案属于戈登。你能给戈登一个答案吗。他首先正确地理解了本质,我的只是一个语法缩短的东西。我把它给了你们,因为语法对我很重要,它使构建查询变得更加容易和方便。但是,正如你所想,答案是戈登