首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过匹配记录查找mysql表

通过匹配记录查找mysql表
EN

Stack Overflow用户
提问于 2013-04-12 02:18:59
回答 2查看 98关注 0票数 2

我有四个表:CouriersCarsPlanesBoats

快递表中的列有:价格、目的地等。

最后三个表格是不同类型的快递员,具有适合快递员类型的不同列(例如,汽车具有柱柱体)。但是,所有四个表都有列IdCourier,它将快递的类型(及其属性)与其价格、目的地等链接起来。

我知道快递员的IdCourier,我想知道它的价格,知道它是汽车,飞机还是轮船。

我应该使用什么Mysql查询?

这种表结构有意义吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-12 03:53:27

有很多方法可以做到这一点。如果您保持这种表结构,那么您可以将其减少到一个查询:

代码语言:javascript
复制
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的第五个表,其中包含字段IdCourierIdType类型。为IdCourier编制索引以进行快速搜索。此示例假设Courier可以适合任何或所有类型(汽车、飞机、轮船)。现在您的查询变为:

代码语言:javascript
复制
SELECT `price`, `Type` 
FROM Couriers
JOIN CouriersTypes ON (Couriers.Id = CouriersTypes.IdCourier)
WHERE IdCourier = ?;

对于大量数据,您的结果会快得多。如果一个向导只能执行一种类型,那么就忘了这个例子,只需将idType类型添加到向导表中并直接查询即可。

代码语言:javascript
复制
SELECT `price`, `Type` 
FROM Couriers
WHERE Id = ?;

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2013-04-12 02:40:40

这种结构是有意义的。查询的类型将取决于您计划对数据执行的操作。

如果你想从汽车中检索一辆特定的汽车,你可以使用如下命令:

代码语言:javascript
复制
SELECT * FROM Courier INNER JOIN Cars ON Cars.IdCourier = Courier.IdCourier WHERE Courier.IdCourier = ?

您可以始终为表设置别名,以使语法更易于编写。此外,只有当您要选择特定记录时,才会使用WHERE子句。

如果您可以发布create table语句,这将有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15955997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档