【问题标题】:Get variable columns for "where value in"获取“where value in”的变量列
【发布时间】:2016-07-27 21:04:58
【问题描述】:

我正在尝试从表中获取所有列。问题是,每个表的列数量和顺序都是可变的。

是否可以从一个特定的表中获取所有列?

我需要检查具有可变列数的表中是否存在值。

【问题讨论】:

标签: java mysql


【解决方案1】:

是的,您可以为此使用tablename.*,这是一个简短的示例:

SELECT table1.*
FROM table1
JOIN table2 ON table2.id = table1.id

要检查任何列中是否存在变量,您首先要使用 scaisEdge 发布的查询来选择列:

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'my_database' 
AND TABLE_NAME = 'my_table';

然后您将遍历此查询的结果以构建查询的 IN(column1, column2 e.t.c) 部分

你可以把这条线放在哪里做你的新选择:

WHERE ? IN(column1, column2)

使用准备好的语句,这样你就不会受到 sql 注入的攻击

【讨论】:

  • 不幸的是,这对我没有帮助。我需要检查一个值是否存在于具有可变列数的表中。
  • 所以您需要检查任何列中是否存在变量?我们在谈论子字符串吗?还是完全匹配?
  • 非常!完全匹配..例如我得到了值 abc,我必须检查该值是否存在于任何列中
  • 您可以使用 MATCH 函数。这确实要求字段具有 FULLTEXT 键,并且您还必须输入所有列(尽管您无法匹配 id)或者您使用 IN (column1,),但这也需要您知道列。如果您真的想要,最好的解决方案是使用 information_schema 选择列,然后从结果中动态构建您的查询
【解决方案2】:

对于与列相关的值,您可以使用

select * from my_table;

否则你应该使用列名

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'my_database' 
 AND TABLE_NAME = 'my_table';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-19
    • 2017-09-25
    • 2016-05-15
    • 2016-07-07
    • 2021-11-30
    • 2020-10-17
    • 1970-01-01
    • 2014-10-21
    相关资源
    最近更新 更多