SQL连接五个表

SQL连接五个表,sql,mysql,join,Sql,Mysql,Join,我有五张桌子: models: id, name, specification models_networks: id, model_id, network_id networks: id, name, description countries_networks: id, country_id, network_id countries: id, countryName, etc, etc 型号:id、名称、规格 型号网络:i

我有五张桌子:

models: id, name, specification models_networks: id, model_id, network_id networks: id, name, description countries_networks: id, country_id, network_id countries: id, countryName, etc, etc 型号:id、名称、规格 型号网络:id、型号id、网络id 网络:id、名称、描述 国家/地区网络:id、国家/地区id、网络id 国家:id、国家名称等
  • models
    表通过
    models\u networks
    以多对多关系连接到
    networks
  • 网络
    表通过
    国家/地区网络
    以多对多关系连接到
    国家/地区
我需要执行以下查询,但我被卡住了:

选择将在特定国家/地区工作的所有型号

e、 g:比如说法国有两个网络。PigNetwork和CowNetwork。我想得到所有在PigNetwork或CowNetwork上工作的模型,基本上是任何在那个国家以这种或那种方式工作的模型

如果我已经说清楚了,有人能帮我处理加入查询吗?我以前只参加过两张桌子。谢谢

SELECT  m.id
FROM    model m
WHERE   EXISTS
        (
        SELECT  NULL
        FROM    model_networks mn
        JOIN    countries_networks cn
        ON      cn.network_id = mn.network_id
                AND cn.country_id = @code_of_france
        WHERE   mn.model_id = m.id
        )
这是有效的,因为它在找到第一个合适的网络时立即返回一个模型

确保您具有以下
唯一的
索引:

model_networks (model_id, network_id)
country_network (country_id, network_id)
(用网络ID替换1,2)


如果你只是想要模型,看起来不需要两个连接。只有在不知道网络ID或需要其他表中的列时,才需要更多连接。但其语法是相同的。在WHERE语句之前,您只需从JOIN ON=
开始,这样做应该是可行的

SELECT M.Name As ModelName FROM Countries C
INNER JOIN Countries_Networks CN
ON C.CountryId = CN.CountryId
INNER JOIN Networks N
ON CN.NetworkId = N.NetworkId
INNER JOIN ModelNetworks MN
ON MN.NetworkId = N.NetworkId
INNER JOIN Model M
ON M.ModelId = MN.ModelId
WHERE C.CountryName = 'FRANCE'

伙计们,我很难选择被接受的答案,因为他们都工作得很好。非常感谢大家。
SELECT M.Name As ModelName FROM Countries C
INNER JOIN Countries_Networks CN
ON C.CountryId = CN.CountryId
INNER JOIN Networks N
ON CN.NetworkId = N.NetworkId
INNER JOIN ModelNetworks MN
ON MN.NetworkId = N.NetworkId
INNER JOIN Model M
ON M.ModelId = MN.ModelId
WHERE C.CountryName = 'FRANCE'
SELECT
  m.name AS model_name,
  c.countryName,
  COUNT(*) AS network_count
FROM
  models                        AS  m
  INNER JOIN models_networks    AS mn ON mn.model_id = m.id
  INNER JOIN networks           AS  n ON n.id = mn.network_id
  INNER JOIN countries_networks AS cn ON cn.network_id = n.id
  INNER JOIN countries          AS  c ON c.id = cn.country_id
WHERE
  c.countryName = 'France'
GROUP BY
  m.name,
  c.countryName
select models.id, models.name, models.specification from models inner join models_networks on models.id = models_network.network_id inner join countries_networks on models_network.network_id = countries_networks.network_id where countries_networks.countryName = 'France'