2011-08-30 67 views
1

那麼請檢查查詢SQL查詢錯誤(雖然怪異查詢)

這裏表名是web18sso_login_a所以

select table_name from information_schema.tables where table_name like '%eb18ssoa%' 

回報web18ssoa

用戶ID是該表中的列

現在我想從查詢中獲得用戶ID的數據

select userid from (
    SELECT * from (
     select * from (
      select table_name from information_schema.tables where table_name='web18ssoa' 
     ) As bbc 
    ) As ccv 
) as nnn 

上面的查詢表示從字段列表中無效的用戶ID

我知道我可以直接使用用戶ID選擇從web18ssoa;

,但我想通過上面的查詢做的是有沒有調用實際的表從一個表名獲取列數據的任何其它方式

請幫我

+3

你有什麼理由需要這種可怕的構造嗎? –

+0

是的,它是我的項目的一部分,我正在做 – SubhashDasyam

回答

0

看起來你是在印象中的查詢選擇從web18ssoa。事實上它不是。最後查詢information_schema.tables。做你想做什麼,你需要通過建立一個動態查詢prepared statements

+0

不能使用Prepare Statements嗎? – SubhashDasyam

+0

@subhashdasyam,沒有,除非你想走出(我的)SQL之外。 – Johan

1

這是您的查詢結構是如何去工作,從內部查詢向外部查詢建立:

內查詢:

select table_name from information_schema.tables where table_name='web18ssoa' 

+------------+ 
| table_name | 
+------------+ 
| web18ssoa | 
+------------+ 

此結果集的別名爲bbc。然後你做一個select * from bbc,別名爲ccv,然後做一個select username from nnn。請注意,在原始查詢結果中沒有「用戶名」字段,這就是爲什麼你得到一個沒有這樣的字段。你不是在查詢'web18ssoa'表。您正在查詢包含發生的行的結果集的值爲web18ssoa。

你不能像這樣建立一個虛擬查詢集。