SQL“In”语句匹配任何内容

时间:2009-12-09 04:41:27

标签: sql subquery

如果我有这样的查询

SELECT * FROM table1 WHERE col1 IN ({SUBS})

我可以用{SUBS}替换它会返回表中的所有行吗?

进一步详情:

我正在我的应用程序中动态构建SQL,所以我不能(不应该)编辑查询的其他部分,除了大括号中的内容。所以,

SELECT * FROM table1

不会这样做。

另外,

SELECT * FROM table1 WHERE col1 IN (SELECT col1 FROM table1)

将是hackish和非常低效。考虑该表有超过50k行。

7 个答案:

答案 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)