Mysql 如果表2中存在所有值,则保留表1中的行
构造此sql查询时遇到一些问题 我有一张加拿大和美国城市的桌子,如下所示:Mysql 如果表2中存在所有值,则保留表1中的行,mysql,sql,Mysql,Sql,构造此sql查询时遇到一些问题 我有一张加拿大和美国城市的桌子,如下所示: +-------------+------------------+ |start |finish | +-------------+------------------+ | Calgary| Vancouver| | Edmonton| Toronto| | Montreal| New York| |
+-------------+------------------+
|start |finish |
+-------------+------------------+
| Calgary| Vancouver|
| Edmonton| Toronto|
| Montreal| New York|
| Chicago| St Louis|
| Miami| Winnipeg|
+-------------+------------------+
我还有一张只有加拿大城市的桌子
+-------------+
|cities |
+-------------+
| Calgary|
| Edmonton|
| Montreal|
| Vancouver|
| Toronto|
| Winnipeg|
+-------------+
我想过滤第一个表,只保留start
和finish
都存在于cities
表中的行,如下所示:
样本输出:
+-------------+------------------+
|start |finish |
+-------------+------------------+
| Calgary| Vancouver|
| Edmonton| Toronto|
+-------------+------------------+
我最初的想法是:
SELECT *
FROM start_finish s, cities c
WHERE c.cities = s.start and c.cities = s.finish
但经过一些尝试和错误后,我意识到只有在开始和结束相同的情况下才会返回值
+-------------+------------------+
|start |finish |
+-------------+------------------+
| Calgary| Calgary|
+-------------+------------------+
任何帮助都将不胜感激 内部连接两次。一次用于
开始
,一次用于完成
SELECT sf1.start,
sf1.finish
FROM start_finish sf1
INNER JOIN cities c1
ON c1.cities = sf1.start
INNER JOIN cities c2
ON c2.cities = sf1.finish;
内部连接两次。一次用于
开始
,一次用于完成
SELECT sf1.start,
sf1.finish
FROM start_finish sf1
INNER JOIN cities c1
ON c1.cities = sf1.start
INNER JOIN cities c2
ON c2.cities = sf1.finish;
您可以使用
join
或exists
:
select sf.*
from start_finish sf
where exists (select 1 from cities c where c.city = sf.start
) and
exists (select 1 from cities c where c.city = sf.finish
) ;
您可以使用
join
或exists
:
select sf.*
from start_finish sf
where exists (select 1 from cities c where c.city = sf.start
) and
exists (select 1 from cities c where c.city = sf.finish
) ;
您正在使用c.cities=s.finish加入,因此它显然应该返回相同的行:)请添加预期输出的示例数据。这将有所帮助。您正在加入c.cities=s.finish,因此它显然应该返回相同的行:)请添加预期输出的示例数据。这会有帮助的。