我有四个表:Couriers、Cars、Planes和Boats。
快递表中的列有:价格、目的地等。
最后三个表格是不同类型的快递员,具有适合快递员类型的不同列(例如,汽车具有柱柱体)。但是,所有四个表都有列IdCourier,它将快递的类型(及其属性)与其价格、目的地等链接起来。
我知道快递员的IdCourier,我想知道它的价格,知道它是汽车,飞机还是轮船。
我应该使用什么Mysql查询?
这种表结构有意义吗?
发布于 2013-04-12 03:53:27
有很多方法可以做到这一点。如果您保持这种表结构,那么您可以将其减少到一个查询:
SELECT `price`, 'car' as `mytype`
FROM Couriers
JOIN Cars ON (Couriers.Id = Cars.IdCourier)
WHERE Cars.IdCourier = ?
UNION
SELECT `price`, 'plane' as `mytype`
FROM Couriers
JOIN Planes ON (Couriers.Id = Planes.IdCourier)
WHERE Planes.IdCourier = ?
UNION
SELECT `price`, 'boat' as `mytype`
FROM Couriers
JOIN Boats ON (Couriers.Id = Boats.IdCourier)
WHERE Boats.IdCourier = ?;但这是相当昂贵的。相反,我会亲自创建一个名为like CouriersTypes的第五个表,其中包含字段IdCourier、IdType和类型。为IdCourier编制索引以进行快速搜索。此示例假设Courier可以适合任何或所有类型(汽车、飞机、轮船)。现在您的查询变为:
SELECT `price`, `Type`
FROM Couriers
JOIN CouriersTypes ON (Couriers.Id = CouriersTypes.IdCourier)
WHERE IdCourier = ?;对于大量数据,您的结果会快得多。如果一个向导只能执行一种类型,那么就忘了这个例子,只需将idType和类型添加到向导表中并直接查询即可。
SELECT `price`, `Type`
FROM Couriers
WHERE Id = ?;希望这能有所帮助。
发布于 2013-04-12 02:40:40
这种结构是有意义的。查询的类型将取决于您计划对数据执行的操作。
如果你想从汽车中检索一辆特定的汽车,你可以使用如下命令:
SELECT * FROM Courier INNER JOIN Cars ON Cars.IdCourier = Courier.IdCourier WHERE Courier.IdCourier = ?您可以始终为表设置别名,以使语法更易于编写。此外,只有当您要选择特定记录时,才会使用WHERE子句。
如果您可以发布create table语句,这将有所帮助。
https://stackoverflow.com/questions/15955997
复制相似问题