如何加入 2 SELECT 语句,但仅在表 B 上满足表 A 的条件时显示输出
Posted
技术标签:
【中文标题】如何加入 2 SELECT 语句,但仅在表 B 上满足表 A 的条件时显示输出【英文标题】:How to JOIN 2 SELECT statements but only show output when conditions from table A are met on table B 【发布时间】:2020-06-13 22:36:20 【问题描述】:我正在练习视图,我需要 JOIN 两个表(最简单的方法),但在满足条件时,表 AI 有 6 行,而表 B 上的条件与表 B 相同(列名相同) ,比如 82。
我只需要显示关于这 6 行的数据。
CREATE VIEW myview AS
SELECT Name AS Country, Population FROM country WHERE Population >= 9000000;
SELECT District, Name AS City, Population FROM city WHERE Population >= 9000000;
我正在使用世界数据库。
_________________City_________________
ID | Name | CountryCode | District | Population
_________________Country_________________
Name | Population | Code
样本数据:
城市
国家
预期结果:
干杯。
【问题讨论】:
您确定表中没有 Country like code 或 countrycode 列吗? 是的。有两个,代码和代码 2。 然后编辑您的问题并发布示例数据和预期结果以阐明您的要求。 请注意,在 mysql 中针对视图的查询对底层索引的访问是有限的,这使得它们(在我看来)相当无用 请use text, not images/links, for text--including tables & ERDs。仅将图像用于无法表达为文本或增强文本的内容。在图像中包含图例/键和说明。请在代码问题中给出minimal reproducible example--cut & paste & runnable code;具有期望和实际输出(包括逐字错误消息)的示例输入(作为初始化代码);标签和版本;明确的规范和解释。对于 SQL,包括 DDL 和表格初始化。 【参考方案1】:如果你想要一个连接两个表的视图,你可以使用
CREATE VIEW myview AS
SELECT co.Name AS Country
, co.Population Country_population
, ci.District
, ci.Name As city
, ci.population City_population
FROM country co
INNER JOIN city ci ON ci.CountryCode = co.Code
WHERE ci.population >= 9000000
然后
select * from myview;
【讨论】:
这看起来很有希望,但在 INNER JOIN 附近有一个语法错误,我不太明白,除了我的意思是人口中缺少“p”。 好的,现在可以了,但它显示了很多行,我猜我可以限制输出,但我认为这个想法太只显示来自城市的数据,所以可能只需要使用我猜是来自城市的人口。 回答已更新,也为城市添加了条件 .. 如果您愿意,可以删除国家/地区人口的条件 太棒了,删除了条件,现在效果很好。非常感谢。【参考方案2】:根据您的预期结果,我假设您希望每个国家/地区的城市/城市都有population >= 9000000
,所以像这样加入:
select
c.Name country,
t.district,
t.city,
t.population
from country c inner join city t
on t.countrycode = c.Code
where t.population >= 9000000;
您也不需要为国家/地区设置条件population >= 9000000
,因为带有population >= 9000000
城市的国家/地区肯定满足该条件。
【讨论】:
以上是关于如何加入 2 SELECT 语句,但仅在表 B 上满足表 A 的条件时显示输出的主要内容,如果未能解决你的问题,请参考以下文章
<select> 元素的纯 CSS 样式,但仅在选择非默认选项时[重复]
我如何更新此代码以第二次运行但仅在已解压缩的 zip 存档上运行?
在 expss 中创建一个表,显示 freq 和 cpct 但仅在 cpct 列上测试 cpct