我是这个地方的新手,虽然我认为我以前使用过这里的解决方案。
我在网络编程方面有点尘土飞扬,只是再次把它拿起来,出于某种原因,我似乎总是得到最好的噩梦......
无论如何我的问题是:
我有7个表需要连接在一起,但并非所有表都在同一个表中。 他们看起来像这样:
caravan_rarity
ID --- ---层类型--- --- chance_interval_start --- chance_interval_end trade_multiplier
caravan_size
ID --- ---层尺寸--- --- stop_points后卫---- ---多样性--- price_first --- price_increase trade_multiplier
caravan_stop
ID --- --- fk_stop_one --- fk_stop_two fk_stop_three
city_other_known
ID --- ---名--- fk_city_size_id --- fk_city_relation_id距离--- upgrade_relation
city_relation
ID --- ---层关系--- trade_multiplier
city_size
ID --- ---层尺寸--- --- lost_revenue --- base_trade_value --- population_range_min --- population_range_max trade_multiplier
fogcity_caravan
ID --- --- fk_caravan_size_id --- fk_city_start --- fk_caravan_stop_id --- fk_city_end fk_caravan_rarity_id
列名称是fk的任何地方,这是一个链接到具有相同名称而没有fk的列的外键(例如:fk_caravan_size_id链接到caravan_size.id)
例外是在caravan_stop表中。所有fk列都链接到city_other_known.id。 同样在fogcity_caravan中,fk_city_start和fk_city_end都链接到city_other_known.id
另一个注意事项:唯一允许为NULL的comlumns是caravan_stop.fk_stop_one,caravan_stop.fk_stop_two和caravan_stop.fk_stop_three
所以我们尝试查询所有这些:
SELECT
caravan_size.size,
caravan_size.diversity,
caravan_size.trade_multiplier,
city_other_known.name,
city_size.trade_multiplier,
city_relation.relation,
city_relation.trade_multiplier,
caravan_rarity.type,
caravan_rarity.trade_multiplier
FROM fogcity_caravan
INNER JOIN caravan_size ON fogcity_caravan.fk_caravan_size_id = caravan_size.id
INNER JOIN caravan_stop ON fogcity_caravan.fk_caravan_stop_id = caravan_stop.id
INNER JOIN city_other_known ON fogcity_caravan.fk_city_start = city_other_known.id
AND fogcity_caravan.fk_city_end = city_other_known.id
AND caravan_stop.fk_stop_one = city_other_known.id
AND caravan_stop.fk_stop_two = city_other_known.id
AND caravan_stop.fk_stop_three = city_other_known.id
INNER JOIN caravan_rarity ON fogcity_caravan.fk_caravan_rarity_id = caravan_rarity.id
INNER JOIN city_size ON city_other_known.fk_city_size_id = city_size.id
INNER JOIN city_relation ON city_other_known.fk_city_relation_id = city_relation.id
而且......正如你们中的一些人可能已经看到的那样(我没有线索天气或者没有这是显而易见的)我得到了0行的回报。
请咨询
提前致谢
答案 0 :(得分:0)
找到左侧的表格,右侧可能存在匹配并使用LEFT JOIN
。对于那些将使用INNER JOIN
明确匹配的人。
请参阅链接here.
例如,你可能在这里LEFT JOIN:
LEFT JOIN city_other_known ON fogcity_caravan.fk_city_start = city_other_known.id
AND fogcity_caravan.fk_city_end = city_other_known.id
AND caravan_stop.fk_stop_one = city_other_known.id
AND caravan_stop.fk_stop_two = city_other_known.id
AND caravan_stop.fk_stop_three = city_other_known.id
使用OR代替AND:
LEFT JOIN city_other_known ON fogcity_caravan.fk_city_start = city_other_known.id
OR fogcity_caravan.fk_city_end = city_other_known.id
OR caravan_stop.fk_stop_one = city_other_known.id
OR caravan_stop.fk_stop_two = city_other_known.id
OR caravan_stop.fk_stop_three = city_other_known.id