【发布时间】:2021-06-10 11:09:07
【问题描述】:
使用 MySQL 数据库在 C# 中开发应用程序。它涉及奶牛及其体重。在表格中显示奶牛的详细信息时,我想显示所有动物的详细信息以及它们的最后体重。
我有两个用于此目的的表格:'Cattle' 和 'Weights'。每只动物都有一个唯一的 ID,该 ID 用作重量表中的外键以及拍摄日期和重量。到目前为止,我这样做的方式是在权重表中获取 MAX(Date) 并使用左连接,但是如果在该日期没有对动物进行称重,那么它将不包括在内。我可以使用每只动物的最大重量(体重),但有些动物可能会因疾病等原因体重下降。
SELECT Cattle.TagNumber,
Cattle.HerdNumber,
Cattle.Breed,
Cattle.DOB,
Cattle.Group,
Weights.Weight
FROM Cattle
LEFT JOIN Weights ON Cattle.TagNumber = Weights.TagNumber
WHERE Cattle.Group = '" + group + "'
AND Date = '" + date.ToString("yyyy/MM/dd") + "'";
上面的查询是我在按动物组过滤数据时使用的。我知道我可以单独检查每只动物并获得它们的 MAX(重量),但这会严重影响性能。
【问题讨论】:
-
不要将查询与数据连接,使用适当的参数化查询如果
group是' TRUNCATE TABLE Cattle; /*会发生什么? -
是的,我同意。在了解 SQL 注入黑客之后,立即将我的所有查询更改为参数化查询。感谢您的建议!
-
为什么权重在一个单独的表格中?还是该查询中未显示某些内容?
-
每只动物可以有多个重量,因此重量与动物编号和拍摄日期一起保存在另一个表格中