Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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 如何将select与变量一起使用_Sql_Where In - Fatal编程技术网

Sql 如何将select与变量一起使用

Sql 如何将select与变量一起使用,sql,where-in,Sql,Where In,为了简化,我有一个表,我只想用蓝色的数据进行选择,这对我来说很棘手,因为我必须使用where textanswer='dimbilli d2',但我只会得到记录5、7、10、12,但我想得到记录6、8、9 我该怎么做 您似乎想要: select t.* from t where t.tansdocnumber in (select t2.transdocnumber from t t2 where t2.textanswer = 'Dimobili D2); 选择具有所需文本列的行并匹配相应的

为了简化,我有一个表,我只想用蓝色的数据进行选择,这对我来说很棘手,因为我必须使用
where textanswer='dimbilli d2'
,但我只会得到记录5、7、10、12,但我想得到记录6、8、9

我该怎么做

您似乎想要:

select t.*
from t
where t.tansdocnumber in (select t2.transdocnumber from t t2 where t2.textanswer = 'Dimobili D2);

选择具有所需文本列的行并匹配相应的Id以获得所需的输出

declare @table table (transdocnumber int, textanswer varchar(20))
insert @table (transdocnumber,textanswer)
select 4631, 'Dimibilli D4' union all
select 4631, '' union all
select 5055, 'Dimibilli D2' union all
select 5055, '' union all
select 5270, 'Dimibilli D2' union all 
select 5270, '' union all 
select 5270, '' union all 
select 5513, 'Dimibilli D2' union all 
select 6279, 'Dimibilli D4' union all 
select 6616, 'Dimibilli D2' union all 
select 6773, 'Dimibilli D4' 

select t.transdocnumber,t.textanswer from (
select transdocnumber from @table where textanswer = 'Dimibilli D2' ) x
inner join @table t on x.transdocnumber = t.transdocnumber where t.textanswer = ''
union all
select transdocnumber,textanswer from @table where textanswer = 'Dimibilli D2'
order by transdocnumber
解决方案:

SELECT t.transdocnumber, t.extrafield_id, t.textanswer, t.BooleanAnswer, t.DtAlt
FROM (
    SELECT *
    FROM TABLE
    WHERE textanswer = 'Dimibilli D2'
    ) x
INNER JOIN TABLE t ON x.transdocnumber = t.transdocnumber
WHERE t.textanswer = ''

UNION ALL

SELECT transdocnumber, extrafield_id, textanswer, BooleanAnswer, DtAlt
FROM TABLE
WHERE textanswer = 'Dimibilli D2'
ORDER BY transdocnumber

据我所知,您希望返回带有textanswer='dimbilli d2'和textanswer='dimbilli d2'的行,但不返回第4行

不能这样做,应该以某种方式区分所需的行

使用

从表中选择*
其中(textanswer='dimbilli d2'或textanswer=''')

正如文所建议的,您将得到第4,5,6,7,8,9,10,12行作为结果,但似乎您只需要5,6,7,8,9,10,12行

例如,您可以使用:

从表中选择*
其中(textanswer='dimbilli d2'或textanswer='')和TransDocNumber>5000


这应该可以

尝试使用以下查询:

select * from table
where (TextAnswer='Dimobili D2' or BooleanAnswer = '1') and TextAnswer!=''

您使用的是什么数据库,SQL只是一种查询语言“但我想得到6、8、9到”为什么?因为他们的
TextAnswer
是空的?还是怎样请解释你为什么想要你想要的结果。无论如何,我在这里没有看到任何变量…@下划线\u d;因为他们有相同的transdocnumber。有些帖子就像拼图:D@underscore_d我猜OP也希望在其中包括空字符串行clauseThanks,我将给出一个示例,我想选择所有与Dimobilli D2相关的行,例如,记录5很简单,但我也想要记录6,但是where子句上的select不能是相同的,现在mill必须是transdocnumber 5055,我想我必须使用一个变量和一个循环,我必须找到dimobilli d2,然后看到transdocnumber,并使用它代替dimobilli d2,但随后记录编号4也将被选择,这对你来说不合适,仅包含6、8和9的逻辑是我的错误,列transdocnumber和textanswer之间存在关系,我想查看文本Answer上的所有transdocnumber和dimobbilid2@AntónioSilva编辑了答案以满足您的需求输出,效果非常好:-)只需添加以下内容其中t.textanswer='Dimobilli D2'或t.textanswer=''“并给我正确的输出。非常感谢:-)将不起作用,您只看到10行左右,但接近6000条记录添加了一些样本测试数据和逻辑,wellOp不想在filter子句中硬编码,他想使用transdocnumber列,请参考我上面编辑的解决方案,应该可以起作用
select * from table
where (TextAnswer='Dimobili D2' or BooleanAnswer = '1') and TextAnswer!=''