如果我有这样的查询
SELECT * FROM table1 WHERE col1 IN ({SUBS})
我可以用{SUBS}替换它会返回表中的所有行吗?
进一步详情:
我正在我的应用程序中动态构建SQL,所以我不能(不应该)编辑查询的其他部分,除了大括号中的内容。所以,
SELECT * FROM table1
不会这样做。
另外,
SELECT * FROM table1 WHERE col1 IN (SELECT col1 FROM table1)
将是hackish和非常低效。考虑该表有超过50k行。
答案 0 :(得分:5)
这样就可以了:
select col1 from table1
编辑:似乎有点混乱 - OP询问可以使用什么值来替换{SUBS}
来返回table1
的所有行。我上面的答案是你可以使用的代替{SUBS}
来返回所有行的内容。
答案 1 :(得分:3)
这适用于SQL Server:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN (COLUMN_NAME)
您是否尝试过 {SUBS} COL1 ?
e.g。
SELECT * FROM table1 WHERE col1 IN (col1)
答案 2 :(得分:2)
如果您将{SUBS}
替换为SELECT col1 FROM table1
,则最终会使用
SELECT * FROM table1 WHERE col1 IN (SELECT col1 FROM table1);
将返回table1
的所有行。当然,这只是一种更为迂回的说法:
SELECT * FROM table1;
答案 3 :(得分:1)
你是对的,
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})
结构的人聊聊。没有良好理由这样做。
我怀疑实施此操作的人正在尝试实施某种 silver-bullet 框架。请记住,软件开发中的黄金法则是没有 白银子弹。
答案 4 :(得分:0)
如果您只是想检索表格中的每一行,那么:
select * from table1
如果你想证明一个观点或赢得赌注,那么:
select * from table1 where col1 in (select col1 from table1)
答案 5 :(得分:0)
如果查询需要一些WHERE条件,那么我会尝试用EXISTS语句替换它:
select * from table1 t1 where exists ( {subs} )
然后{subs}可以替换为任何不产生NULL的表达式。
答案 6 :(得分:0)
这适用于Oracle:
select * from table1 where col1 in (col1)