如何从其他表中获取列,以形成新表?

时间:2016-01-20 12:19:31

标签: java sqlite jdbc

我对使用JDBC和SQL比较陌生。我有两个表,CustomerDetailsCakes。我想创建一个名为Transactions的第三个表,它使用来自CustomerDetails的'Names'列,来自Cakes的'Description'列,以及两个新的'Cost'和'Price'列。我知道这可以通过使用关系数据库来实现,但我不确定如何去做。我看到的一个网站说这可以使用ResultSet完成,另一个网站使用该列的元数据。但是,我不知道如何去做。

3 个答案:

答案 0 :(得分:0)

您可能希望做的是创建一个SQL视图' (为简化 - 虚拟表格),请参阅此documentation

CREATE VIEW view_transactions AS
SELECT Name from customerdetails, Description from cakes... etc.
FROM customerdetails;

或者那些行

然后,您可以查询View view_transactions,例如,就像它是一个合适的表一样。

另外,为什么在使用sqlite时将其标记为mysql。

答案 1 :(得分:0)

您应手动创建新表格,即在程序之外。使用命令行'客户端'例如sqlite3

如果需要,可以使用该工具中的.schema CustomerDetails命令显示表格的DDL("元数据"如果需要)。

然后,您可以编写定义新列的新CREATE TABLE Transactions (...),以及之前由.schema命令显示的旧表中的列。

请注意,.schema仅用于显示现有表的确切列定义,因此您可以在新表中创建匹配的列。如果您已经知道当前的列定义,因为您自己创建了这些表,您当然可以跳过该步骤。

另请注意,SELECT Name from CUSTOMERDETAILS将始终从该表返回数据,但从不返回结构,即列定义。尝试从中导出列定义时,数据无用。

如果确实希望/必须以编程方式访问数据库的元数据,则记录的方法是通过查询sqlite_master系统表来执行此操作。另请参见SQLite Schema Information Metadata

答案 2 :(得分:0)

您应该阅读数据建模的概念以及关系数据库如何帮助您,然后您的事务表可能如下所示:

CREATE TABLE transactions ( 
  id          int not null primary key
, customer_id int not null references customerdetails( id )
, cake_id     int not null references cakes( id )
, price       numeric( 8, 2 ) not null
, quantity    int not null 
);

通过这种方式,您可以确保每次交易(在这种情况下只是发票的单个位置),蛋糕和客户都存在。

我同意@ hanno-binder,在普通的JDBC中创建所有这些并不是最好的主意。