2011-08-30 68 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。

你不能像这样建立一个虚拟查询集。