2009-12-09 55 views
2

如果我有這樣的SQL「在」聲明匹配任何

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

查詢有什麼我可以用替代{} SUBS將返回表中的所有行?

進一步瞭解詳細:

我動態生成SQL中我的應用程序,所以我不能(也不應該)編輯查詢的其他部分,除了什麼在支撐。所以,

SELECT * FROM table1 

不會這樣做。

此外,

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

將hackish的和非常低效。考慮表格有超過50k行。

+1

我知道這是不是問題,但我要問:你只是試圖讓所有的行?如果是這樣,只需取下「WHERE col1 IN({SUBS})」部分。 –

+1

有人告訴我一次 - 沒有這樣的事情,作爲一個愚蠢的問題... – pstanton

+1

聽起來像有人正在建立動態SQL給我... – marcc

回答

5

這將做到這一點:

select col1 from table1 

編輯:似乎有是混亂的一點 - 該任擇議定書要求,可以使用什麼值來代替{SUBS}會從table1返回所有行。我上面的答案是你可以用來代替{SUBS},它將返回所有的行。

+1

你的意思是** select * from table1 ** – pstanton

+3

不,我的意思是'從列表1中選擇col1 :) –

+2

我認爲viligant試圖找出是否有人可以使用SQL注入來查找表中的所有數據,回覆將允許,雖然我可能會使用 SELECT distinct col1 FROM table1 但他的回答是正確的 – Sparky

2

如果用SELECT col1 FROM table1更換{SUBS},你最終會與

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

這會從table1返回所有行。這是當然,只是說的更迂迴的方式:

0

如果你只是想檢索表中的每一行,然後:

select * from table1 

如果你想證明一個觀點或贏得打賭什麼的,然後:

select * from table1 where col1 in (select col1 from table1) 
3

這對我的作品在SQL Server:

SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME IN (COLUMN_NAME) 

您是否嘗試過使用COL1對於{SUBS}

例如

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

美麗的答案。 – tyriker

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})結構的人聊天。沒有這樣做的理由。

  • 它不必要地使查詢複雜化。
  • 產生高效率查詢的風險。
  • 潛在地甚至限制了開發者使用某些技術。

我懷疑這個人正在試圖實施某種銀彈框架。請記住,在軟件開發中的黃金法則是有沒有銀子彈

0

如果查詢需要一定的WHERE條件,那麼我會嘗試用一個取代它的存在語句:

select 
    * 
from 
    table1 t1 
where 
    exists ({subs})

然後{}潛艇可以與不產生任何NULL表達代替。

0

此作品在甲骨文:

select * from table1 where col1 in (col1)