我有一个阶级梳妆台,扩展抽象阶级的家具。
这是班级家具。
public abstract class Furniture {
private String furnishing;
private String board;
private String wood;
private double mass;
private int price;
private int shippingPrice;
}
这是班级梳妆台。
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";
这将是我选择所有记录的查询(可以安全地忽略提供字段)。
如何改进?另外,我如何进行查询来选择给定某个索引的某个记录,或者如何更新某个记录?
我在用mysql。
4条答案
按热度按时间rmbxnbpk1#
更新必须在两个语句中完成。您可能希望将这两条语句 Package 在一个事务中,以确保它们都成功或失败。
snz8szmq2#
要仅选择特定的梳妆台,请使用
在这里
@index
是您想要的梳妆台的索引(参见https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-parameters.html).j1dl9f463#
我强烈建议使用
INNER JOIN
在笛卡尔积上或与WHERE
条款。例如:
dldeef674#
如果确实要选择所有记录(“我的查询选择所有记录”),则需要
left join
,确保您得到的家具不是梳妆台:如果你只想要所有的梳妆台,那么
INNER JOIN
很好。