选择行的次数与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没有拖拉,只是因为示例表中没有其他列而感到困惑。我知道何处用于过滤,但不知道如何以其他方式显示我的意思;感谢您的回答,作品中格雷蒂知道哪里是用来过滤的,但不知道如何以其他方式表达我的意思;谢谢你的回答,太好了。你能把答案给戈登吗。他首先正确地理解了本质,我的只是一个语法缩短的东西。我把它给了你们,因为语法对我很重要,它使构建查询变得更加容易和方便。但是,正如你所想,答案属于戈登。你能给戈登一个答案吗。他首先正确地理解了本质,我的只是一个语法缩短的东西。我把它给了你们,因为语法对我很重要,它使构建查询变得更加容易和方便。但是,正如你所想,答案是戈登