我有几个(MySQL)表。有趣的是CampaignRegion,它存储到Campaign的外键和一个到City,County,District,State或Country的外键。始终只有一个特定于位置的外键集,其他的是NULL。CampaignRegion表如下所示:mysql> describe CampaignRegion;+-------------+---------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-------------+---------+------+-----+---------+----------------+| id | int(11) | NO | PRI | NULL | auto_increment || campaign_id | int(11) | YES | MUL | NULL | || country_id | int(11) | YES | MUL | NULL | || state_id | int(11) | YES | MUL | NULL | || district_id | int(11) | YES | MUL | NULL | || county_id | int(11) | YES | MUL | NULL | || city_id | int(11) | YES | MUL | NULL | |+-------------+---------+------+-----+---------+----------------+我现在需要一个查询来选择Campaign。我有一个City,需要获取与Campaigns本身或City或County或District或State的Country匹配的City。这实际上非常容易,我想出了类似以下内容:SELECT count(id) as campaign_count, campaign_id FROM CampaignRegion WHERE (city_id = 32076 OR district_id = 127 OR state_id = 7 OR country_id = 156) GROUP BY campaign_idHAVING campaign_count > 0;但是我想得到的Campaigns结果集首先与City匹配,然后与County匹配,然后与District匹配,依此类推(例如中有一个简单的方法吗?我会根据OR或SELECT中的此查询对Campaign(第一个匹配的)JOIN做些什么呢?谢谢您的帮助。 最佳答案 我认为这是您要寻找的:SELECT count(id) as campaign_count, campaign_idFROM CampaignRegionWHERE (city_id = 32076 OR district_id = 127 OR state_id = 7 OR country_id = 156)GROUP BY campaign_idHAVING campaign_count > 0;ORDER BY (city_id = 32076) DESC, (country_id = 156) DESC, (state_id = 7) DESC, (district_id = 127) DESC;关于mysql - 查找与一个字段匹配的相关实体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11825681/