给定固定的目标数据表,例如
1 2 3 4 5
Spain, Portugal, France, Italy, Greece
输入由数据列加上启用列的可配置列表组成,例如[1, 4]输入可能只包含Spain和Italy。
目的是构建一条SQL语句(尽管它本身不是SQL问题),它将仅将输入中可用的列设置为正确的位置。
可能的输入:
enabled columns: 2,4,5
data:
p1 i1 g1
p2 i2 g2
.............
尝试以编程方式(在Java中)而不是在SQL中执行此操作,并且不确定如何避免疯狂地分支if“ s”和else“ s”。
问题不仅与这种特定情况有关,而且实际上不是sql或另一种编程语言,而是有关在给定某种形式的定义(例如在这种情况下为索引)的情况下如何将变量输入映射到固定输出的问题。
问题来源:Stack Overflow
如果我没有误解您的问题,则希望在SQL中生成一系列INSERT INTO命令,以将新的元组添加到表中,并使用一些默认值(例如NULL)保存未在程序输入中传递的文件。因此,在您的示例中,您想要生成以下SQL语句:
INSERT INTO YOUR_TABLE_NAME(NULL,p1,NULL,i1,g1);
INSERT INTO YOUR_TABLE_NAME(NULL,p2,NULL,i2,g2);
然后,可以按以下方式实现此功能:
public static String insertOptional(int[] inputColumns, String[][] data) {
// start of the simple algorithm
final String tableName = "YOUR_TABLE_NAME";
final int columnsOfTable = 5; // as in your example
StringBuilder sqlStatement = new StringBuilder();
for (String[] tuple : data) {
sqlStatement.append("INSERT INTO ")
.append(tableName)
.append("(");
int inputColumnIndex = 0;
for (int columnIndex = 1; columnIndex <= columnsOfTable; columnIndex++) {
if (columnIndex == inputColumns[inputColumnIndex]) {
sqlStatement.append(tuple[inputColumnIndex]);
inputColumnIndex++;
} else {
// replace "NULL" with your default value for
// fields that are not given as input
sqlStatement.append("NULL");
}
if (columnIndex < columnsOfTable)
sqlStatement.append(",");
}
sqlStatement.append(");\n");
}
return sqlStatement.toString();
}
并且,您的示例可以按以下方式执行:
public static void main(String[] args) {
int[] inputColumns = { 2, 4, 5 };
String[][] data = { { "p1", "i1", "g1" }, { "p2", "i2", "g2" } };
String sqlStatement = insertOptional(inputColumns, data);
System.out.println(sqlStatement);
}
这个主要方法完全打印出我认为的期望:
INSERT INTO YOUR_TABLE_NAME(NULL,p1,NULL,i1,g1);
INSERT INTO YOUR_TABLE_NAME(NULL,p2,NULL,i2,g2);
回答来源:Stack Overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。