从一对一关系中的联接表中选择数据

我有一个类梳妆台,它扩展了抽象类家具。


这是类家具。


public abstract class Furniture {


    private String furnishing;

    private String board;

    private String wood;

    private double mass;

    private int price;

    private int shippingPrice;


}

这是Dresser类。


public final class Dresser extends Furniture {


    private int width;

    private int length;

    private int height;

    private int drawers;


}

继承在表中表示如下:


CREATE TABLE furnitures (

    index INTEGER NOT NULL AUTO_INCREMENT,

    furnishing VARCHAR(255) NOT NULL,

    board VARCHAR(255) NOT NULL,

    wood VARCHAR(255) NOT NULL,

    mass FLOAT(5,2) NOT NULL,

    price INTEGER NOT NULL,

    shipping_price INTEGER NOT NULL,

    PRIMARY KEY (index)

)


CREATE TABLE IF NOT EXISTS dressers (

    index INTEGER NOT NULL,

    width INTEGER NOT NULL,

    length INTEGER NOT NULL,

    height INTEGER NOT NULL,

    drawers INTEGER NOT NULL,

    PRIMARY KEY (index),

    FOREIGN KEY (index) REFERENCES furniture (index)

)

我需要构建一个查询,允许我选择一条记录或从表中选择所有记录,但到目前为止我已经想出了这个,但我不知道这是否是最好的方法。


String query =

"SELECT furniture.board, furniture.wood, furniture.mass, " +

"furniture.price, furniture.shipping_price, " +

"dresser.width, dresser.length, dresser.height, dresser.drawers " +

"FROM furniture, dresser " +

"WHERE " +

"furniture.index = dresser.index";

这将是我选择所有记录的查询(可以安全地忽略装饰字段)。


如何改进?另外,我如何查询以选择给定索引的某个记录或如何更新记录?


PD:我正在使用 MySQL。


拉丁的传说
浏览 196回答 3
3回答

慕村9548890

更新必须在两个语句中完成。您可能希望将这两个语句包装在一个事务中,以确保它们都成功或失败。

慕娘9325324

我强烈建议使用INNER JOINover a cartesian product 或 cross join 与WHERE子句中的 join 。例如:String query = "SELECT * FROM furniture f INNER JOIN dresser d ON f.index = d.index"

慕工程0101907

要仅选择特定的梳妆台,请使用String query ="SELECT f.board, f.wood, f.mass, f.price, f.shipping_price,    d.width, d.length, d.height, d.drawersFROM furniture fJOIN dresser d ON f.index = d.indexWHERE f.index = @index"这@index是您想要的梳妆台的索引(请参阅https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-parameters.html)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java