编写一个更高效的查询,mysql
表: 属性:编写一个更高效的查询,mysql,mysql,sql,optimization,query-optimization,Mysql,Sql,Optimization,Query Optimization,表: 属性: A,B,Animal,Car 我想要的是: 选择以下内容的As和Bs: A:LinkingID, AnimalID, CarID B:LinkingID, AnimalID, CarID Animal:AnimalID, Name , Breed Car:CarID, Weight 我写的问题是: A.LinkingID=B.LinkingID (Animals with AnimalID same as A.AnimalID).Name = (Animals with
A,B,Animal,Car
我想要的是:
选择以下内容的As和Bs:
A:LinkingID, AnimalID, CarID
B:LinkingID, AnimalID, CarID
Animal:AnimalID, Name , Breed
Car:CarID, Weight
我写的问题是:
A.LinkingID=B.LinkingID
(Animals with AnimalID same as A.AnimalID).Name = (Animals with AnimalID same as B.AnimalID).Name
(Animals with AnimalID same as A.AnimalID).Breed = (Animals with AnimalID same as B.AnimalID).Breed
(Animals with AnimalID same as A.AnimalID).Color = (Animals with AnimalID same as B.AnimalID).Color
(Cars with CarID same as A.CarID).Weight = (Cars with CarID same as B.CarID).Weight
可以编写更高效的查询吗?使用比表名本身更长的表别名有点奇怪:)这是有效的,如果有点奇怪的话-其中z=x和z=y与写入其中y=x和z=y是一样的,这是比较常见的。有关更多帮助,请提供SHOW CREATE和EXPLAIN SELECT语句为什么有两个模式相同的表(A和B)?如果A和B表示两种不同类型的链接,那么可能会合并这些表,并添加一个带有
A
和B
值的type
列?
select * from A dzo
inner join B sar
on dzo.LinkingID = sar.LinkingID
inner join Car c1
on c1.CarID = dzo.CarID
inner join Car c2
on c2.Weight = c1.Weight
and c2.CarID = sar.CarID
inner join Animal v1
on v1.AnimalID = dzo.AnimalID
inner join Animal v2
on v2.Name = v1.Name
and v2.Breed = v1.Breed
and v2.AnimalID = sar.AnimalID
;