有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何区分从多个表中选择的数据?

我想在16个不同的表中搜索,但我不想重复“从数据库中选择”16次;我觉得这对表现没什么帮助

我正在使用:

query="SELECT * FROM table1, table2,..., table16 WHERE id=?";

对吗?? 我的问题是如何在表的数据之间进行分离

也可能我可以从一个表中得到两个或更多的结果,一个“id”;所以我想知道哪些数据来自哪个表!! . 致以最良好的祝愿


共 (3) 个答案

  1. # 1 楼答案

    对于同名字段,必须使用别名列出所有字段,并使用表名作为前缀

    例如:

    query = "SELECT table1.id as id_1, table2.id as id_2, ... WHERE id_1 = 23"
    

    可能需要编写一个很长的查询,但您有生成和粘贴它的解决方案:您可以使用FlySpeed SqlQuery(免费供个人使用)这样做

    FlySpeed SqlQuery将为您生成所有别名,并自动为表名添加前缀

  2. # 2 楼答案

    稍微澄清一下会有所帮助。如果所有16个表都有相同的字段,并且希望它们位于一个连续列表中,那么可以按照上面的建议使用UNION。另一方面,如果只有几个匹配的字段,并且您想要并排比较每个表的值,那么您需要使用联接,并为表名提供别名,如上所述

    但是,看看您提供的代码片段,我猜您要么在构建某种存储过程,要么在用其他语言实现SQL。如果是这种情况,那么将表名加载到数组中,并使用for循环来构建查询,例如下面的psuedo代码:

    tableList = ["table1", "table2"...]
    fieldnames = ["field1", "field2"...]
    
    query = "SELECT "
    
    for i = 0 to count(tableList):
        for j = 0 to count(fieldnames):
             query = query + tablelist[i] + "." + fieldnames[j] + ", "
        j++
    i++
    
    query = query + "FROM " 
    
    for i = 0 to count(tableList):
        query = query + tableList[i] + ", "
    i++
    
    query = query + "WHERE " ...
    

    等等。这在很大程度上取决于你想要做什么,你想要多久做一次,以及变量(比如你正在使用的表或字段)改变的频率

  3. # 3 楼答案

    您的查询将不起作用,因为您正试图连接这些多个表,而您要做的是搜索(筛选)这16个表

    您可以使用union all在单个查询中执行此操作:

    select xxx, 'table1' as source_table
        from table1
    where id = ?
    union all
    select xxx, 'table2' as source_table
        from table2
    where id = ?
    

    等等。第二个派生字段source_table可用于确定哪个表返回哪个结果