Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 组合多个表的SQL语法_Java_Sql_Android_Sqlite - Fatal编程技术网

Java 组合多个表的SQL语法

Java 组合多个表的SQL语法,java,sql,android,sqlite,Java,Sql,Android,Sqlite,我需要显示一个列表,按日期排序,其中包含不同类型的数据、图像、视频等等 我想您可以为每种类型使用一个单独的表,并使用类似于完全外部联接(模拟为sqlite不支持)的方式,并按日期排序。但这会很复杂,因为我仍然需要在所有表中都有唯一的ID 也许有一个包含ID和日期的主列表,然后加入类型表?但是使用sqlite的性能有多差?我真的很想避免拥有一个超级表,其中包含所有组合类型可能需要的列 想法呢?这是您希望在数据库中执行的操作吗?我猜在代码中,您可以将数据映射到不同类型的对象(例如,类视频,类图像…)

我需要显示一个列表,按日期排序,其中包含不同类型的数据、图像、视频等等

我想您可以为每种类型使用一个单独的表,并使用类似于完全外部联接(模拟为sqlite不支持)的方式,并按日期排序。但这会很复杂,因为我仍然需要在所有表中都有唯一的ID

也许有一个包含ID和日期的主列表,然后加入类型表?但是使用sqlite的性能有多差?我真的很想避免拥有一个超级表,其中包含所有组合类型可能需要的列


想法呢?

这是您希望在数据库中执行的操作吗?我猜在代码中,您可以将数据映射到不同类型的对象(例如,
类视频
类图像
…),这样您也可以将数据组合在一起。

您应该尝试构建并查看您得到的性能影响。
SQLite是一个速度非常快的引擎,在移动设备上闪存速度较慢。但即使有上万条记录,你也能得到快速的查询


在没有性能影响之前,不应该对其进行欺骗。

我知道有三种模式可以将类层次结构映射到关系数据库的表:

  • 一个表用于整个层次结构。每一行将包含层次结构类的所有属性的并集。在我看来,如果课程发生变化,这是很难维持的。当然,每一行都需要一个类型标识符
  • 层次结构中每个具体类对应一个表。在这种情况下,表示具体类的表包含该类的属性加上所有抽象基类的属性。抽象类不是直接映射的
  • 每个抽象和具体类对应一个表。在这种情况下,每个类都直接映射到一个表
  • 1的优点。实现您想要做的事情相当容易,即读取属于类层次结构的所有对象。但是你浪费了一些空间。在2.中,您可以读取一个select语句的子select中的每个表,其中其他类的属性具有常量伪值,然后将它们合并到一个SQL语句中。在3。查询变得有点复杂:您必须将具体的类表与子选择中的基类表进行内部联接。不过,在这两种情况下,您都不需要完全的外部联接


    增编: 假设您有一个对象层次结构,其中包含一个
    Person
    类和两个子类
    Student
    Teacher
    。在2.中,您将创建两个表,STUDENT和TEACHER,这两个表都有一个列名。学生表有一个额外的列YEAR,而教师表有一个列SALARY。您的查询可能如下所示:

        SELECT 'STUDENT' AS TYPE, NAME, YEAR, NULL AS SALARY FROM STUDENT 
    UNION SELECT 'TEACHER' AS TYPE, NAME, NULL AS YEAR, SALARY FROM TEACHER
    

    然后,您可以检索并使用它用数据填充对象,或使用
    SimpleCorsorAdapter
    或任何您喜欢的工具进行显示。

    是的,这是我想在数据库中执行的操作。我不明白你回答的另一部分:为你的不清楚感到抱歉。我的想法是,如果数据库中有不同类型的数据,比如说有视频(id,date…)和图像(id,date…),那么也可以使用与Java类相同的类型。这使您能够在代码中进行排序。我猜你目前没有做任何对象关系映射?你能告诉我们你的想法的表模式吗?当然,但我主要想知道这是否是一个好的数据库模式。我是否应该使用主列表?我将创建一个名为
    listentry
    的表,其中包含id、日期等。。。然后使用附加表存储特定类型的附加数据,例如
    listentry\u comments
    listentry\u images
    listentry\u video
    。然后对附加表进行多个左联接?可以联接,也可以在需要时执行另一个查询以显示这些数据。请注意,列表中并没有显示所有的值,只是显示项目的名称,没有必要为此而加入表。啊,是的。我需要加入,因为我想在线显示(至少一些)东西,比如图像。谢谢你能举例说明一下吗?或者只告诉我如何进行查询?但这要求您使用have-have-same列(null-as-year)。如果不这样做,就没有办法做到这一点吗?就像在主表上使用联接一样。我自己也试过了,但由于连接使用最后一条语句,所以无法找出如何针对每个连接的主表进行连接。类似于这样的情况,只是所有连接都针对条目表: