[英]MySQL Query many-to-one join
我正在使用一个查询,该查询使用引用一个表的几列中的ID来获取有关该ID的信息。 这是代码:
SELECT `Events`.EventID,
`Events`.AssociationID,
`Events`.Association2ID,
`Events`.Association3ID,
`Events`.Association4ID,
`Events`.Association5ID,
`Events`.DateFrom,
`Events`.DateTo,
`Events`.EventName,
`Events`.VenueID,
`Events`.TestnTune,
`Events`.ShownShine,
`Events`.SpecialInfo,
`Events`.OtherInfo,
`Events`.Rating,
`Events`.EventOverlay,
`Events`.HavePictures,
`Events`.IncludeInSchedule,
`Events`.EventURL,
Associations.Active,
Associations.Acronym,
Associations.OrgName,
Associations.WebURL,
Associations.LogoURL,
Venues.LocationName,
Venues.Location,
Venues.longetude,
Venues.latitude,
Venues.Directions,
Venues.SitePros,
Venues.SiteCons,
Venues.BasicInfo,
Venues.SiteRating,
Venues.HostedEvents,
Venues.CurrentWeather
FROM `Events`
LEFT JOIN Associations ON `Events`.AssociationID = Associations.AssociationID
AND `Events`.Association2ID = Associations.AssociationID
AND `Events`.Association3ID = Associations.AssociationID
AND `Events`.Association4ID = Associations.AssociationID
AND `Events`.Association5ID = Associations.AssociationID
LEFT JOIN Venues ON `Events`.VenueID = Venues.VenueID
WHERE `Events`.DateFrom >= NOW()
我要做的是捕获有关每个ID的详细信息。 我不知道该怎么做。 例如:
For Association2ID:
Associations.Active,
Associations.Acronym,
Associations.OrgName,
Associations.WebURL,
Associations.LogoURL
For Association3ID
Associations.Active,
Associations.Acronym,
Associations.OrgName,
Associations.WebURL,
Associations.LogoURL,
etc.
如果将JOIN
更改为
LEFT JOIN Associations ON
Associations.AssociationID IN (`Events`.AssociationID,
`Events`.Association2ID,
`Events`.Association3ID,
`Events`.Association4ID,
`Events`.Association5ID)
这样会改善吗?
您可能还应该考虑将事物重组为第一范式 。
而不是为潜在的AssociationID保留5列,而是对这种多对多关系ID进行建模的正常方法,以使用具有两列AssociationID
和EventId
的联结表
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.