我有一个Dresser类,它扩展了抽象类Furniture。
这是家具类。
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)
)
我需要构建一个查询,使我可以选择一个记录或从表中选择所有记录,但是到目前为止,我已经提出了这个建议,但是我不知道这是否一定是最好的方法。 / p>
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。
答案 0 :(得分:0)
要仅选择特定的梳妆台,请使用
String query =
"SELECT f.board, f.wood, f.mass, f.price, f.shipping_price,
d.width, d.length, d.height, d.drawers
FROM furniture f
JOIN dresser d ON f.index = d.index
WHERE f.index = @index"
@index
是您想要的梳妆台的索引(请参见https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-parameters.html)。
答案 1 :(得分:0)
我强烈建议在笛卡尔积上使用INNER JOIN
或通过WHERE
子句中的联接进行交叉联接。
例如:
String query = "SELECT * FROM furniture f INNER JOIN dresser d ON f.index = d.index"
答案 2 :(得分:0)
更新必须在两个语句中完成。您可能需要将两个语句包装在transaction中,以确保它们都成功或失败。
答案 3 :(得分:0)
如果您确实要选择所有个记录(“我的查询以选择所有记录”),则
您想要left join
,以确保您获得的家具不是梳妆台:
SELECT f.board, f.wood, f.mass, f.price, f.shipping_price,
d.width, d.length, d.height, d.drawers
FROM furniture f LEFT JOIN
dresser d
ON f.index = d.index
WHERE f.index = @index;
如果您只想要所有梳妆台,那么INNER JOIN
很好。