SQL连接五个表
我有五张桌子: 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、国家名称等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
以多对多关系连接到models\u networks
表networks
表通过网络
以多对多关系连接到国家/地区网络
表国家/地区
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'