编写一个更高效的查询,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

;