[英]SQL “In” Statement Match Anything
如果我有这样的查询
SELECT * FROM table1 WHERE col1 IN ({SUBS})
有什么我可以替换{SUBS},它将返回表中的所有行?
更多详情:
我正在我的应用程序中动态构建SQL,所以我不能(不应该)编辑查询的其他部分,除了括号中的内容。 所以,
SELECT * FROM table1
不行。
也,
SELECT * FROM table1 WHERE col1 IN (SELECT col1 FROM table1)
将是hackish和非常低效。 考虑表有超过50k行。
这样做:
select col1 from table1
编辑:似乎有点混乱 - OP询问可以使用什么值来替换将返回table1
所有行的{SUBS}
。 我上面的答案就是你可以使用什么代替返回所有行的{SUBS}
。
这适用于SQL Server:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN (COLUMN_NAME)
您是否尝试过将COL1用于{SUBS} ?
例如
SELECT * FROM table1 WHERE col1 IN (col1)
如果用SELECT col1 FROM table1
替换{SUBS}
,你最终会得到
SELECT * FROM table1 WHERE col1 IN (SELECT col1 FROM table1);
这将返回table1
所有行。 当然,这只是一种更为迂回的说法:
SELECT * FROM table1;
你是对的,
SELECT * FROM table1 WHERE col1 IN (SELECT col1 FROM table1)
确实有效,但效率很低; 需要合并连接才能返回所有行。
使用以下效果与常规SELECT * FROM table1
一样高效
SELECT * FROM table1 WHERE col1 IN (col1)
但是,那说; 我建议您与试图强制使用SELECT * FROM table1 WHERE col1 IN ({SUBS})
结构的人聊天。 没有充分的理由这样做。
我怀疑强加于此的人正试图实施某种银弹框架。 请记住,软件开发的黄金法则是没有 银子弹 。
如果您只是尝试检索表中的每一行,那么:
select * from table1
如果你想证明一个观点或赢得赌注或其他什么,那么:
select * from table1 where col1 in (select col1 from table1)
如果查询需要一些WHERE条件,那么我会尝试用EXISTS语句替换它:
select * from table1 t1 where exists ( {subs} )
然后{subs}可以替换为不产生NULL的任何表达式。
这适用于Oracle:
select * from table1 where col1 in (col1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.