首页 > 解决方案 > 结合2个select语句和join sql

问题描述

我目前在 sql 语句上遇到问题

这是我的代码

SELECT [Cities].ProvinceId,[Cities].Name,[Provinces].Name
FROM [Cities] JOIN Provinces
ON [Cities].ProvinceId = [Provinces].id
UNION
SELECT [Regions].RegionName,[Countries].CountryName
FROM [Regions] JOIN Countries
ON [Regions].RegionId = [Countries].RegionId

所以基本上我想做的是得到城市、省、地区和国家。

顺便说一下,我有 4 个地区,即东盟 = 1,亚洲 = 2,全球 = 3,国内 = 4

所以 DOMESTIC 只需要在城市和省上,因为它们是我国家的本地地方

地区 1,2,3 是针对国家/地区的,但由于这些错误,我可以加入主题

使用 UNION、INTERSECT 或 EXCEPT 运算符组合的所有查询必须在其目标列表中具有相同数量的表达式。

顺便说一句,我在我的 API 上这样应用它

var provinces = await _provinceRepository.GetAll();
var cities = await _cityRepository.GetAllCities();

var result = provinces.Join(cities, p => p.Id, c => c.ProvinceId, (p, c) => 
    new DestinationModel
    {
        Region = null,
        City = c.Name,
        State = p.Name,
        Continent = null,
        Country = null
    }).ToList();

return Ok(result);

现在您可以看到我的问题是,目前我只能获取地区和国家的省市仍然为空。有人可以帮我查询。

标签: c#sql.netasp.net-web-api

解决方案


所以基本上我想做的是得到城市、省、地区和国家。

这会做你想要的吗?

SELECT c.Name as city, p.Name as province, co.name as country,
       r.name as region
FROM Cities c
JOIN Provinces p ON c.ProvinceId = p.id
JOIN Countries co ON p.CountryId = co.id
JOIN Regiones r ON co.RegionId = r.id;

对我来说,这似乎是一个更明智的结果。


推荐阅读