Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server:根据查询中收集的值选择行_Sql_Sql Server - Fatal编程技术网

SQL Server:根据查询中收集的值选择行

SQL Server:根据查询中收集的值选择行,sql,sql-server,Sql,Sql Server,如果问题不是很清楚,我很抱歉,但是在像标题这样短的空间里,这是一个相对难以表达的问题 假设您有一张如下所示的表格: +----+---------+----------------+ | ID | Name | Country | +----+---------+----------------+ | 1 | James | Mexico | | 2 | Peter | South Africa | | 3 | Paul | Mexic

如果问题不是很清楚,我很抱歉,但是在像标题这样短的空间里,这是一个相对难以表达的问题

假设您有一张如下所示的表格:

+----+---------+----------------+
| ID |  Name   |    Country     |
+----+---------+----------------+
|  1 | James   | Mexico         |
|  2 | Peter   | South Africa   |
|  3 | Paul    | Mexico         |
|  4 | Colonel | Panama         |
|  5 | James   | United Kingdom |
|  6 | Hannah  | United Kingdom |
+----+---------+----------------+
我想做的是运行一个查询,说抓到任何一个叫詹姆斯的人,以及任何一个和詹姆斯住在同一个国家的人。在这种情况下,它将返回:

+----+--------+----------------+
| ID |  Name  |    Country     |
+----+--------+----------------+
|  1 | James  | Mexico         |
|  3 | Paul   | Mexico         |
|  5 | James  | United Kingdom |
|  6 | Hannah | United Kingdom |
+----+--------+----------------+
虽然这个例子看起来有点荒谬,但它当然是基于一个真实的问题,只是一种简化

事实上,很像这张表(虽然分配的规则没有明确说明这一点),在詹姆斯的国家里,总会有一个“詹姆斯”在其他人之前——例如,在这张表中,从墨西哥交换詹姆斯总是在墨西哥交换保罗之前

事实上,在大多数情况下,来自墨西哥的保罗将直接接替来自墨西哥的詹姆斯,尽管这并不能保证


那么什么样的语法可以让我执行这样的查询呢?唯一可行的方法是返回James(es?)的列表,然后使用WHERE country=mexico | | ukin

简单解决方案,
EXISTS
运行单独的查询:

select *
from tablename t1
where exists (select 1 from tablename t2
              where t2.Country = t1.Country
                and t2.Name = 'James')
或者,进行自
连接

select t1.*
from tablename t1
  join (select distinct Country from tablename where Name = 'James') t2
  on t2.Country = t1.Country

简单的解决方案,
存在

select *
from tablename t1
where exists (select 1 from tablename t2
              where t2.Country = t1.Country
                and t2.Name = 'James')
或者,进行自
连接

select t1.*
from tablename t1
  join (select distinct Country from tablename where Name = 'James') t2
  on t2.Country = t1.Country

这里我能想到的最简单的查询是在子句中使用
的查询:

select *
from mytable
where country in (select country from mytable where name = 'James');

这里我能想到的最简单的查询是在
子句中使用
的查询:

select *
from mytable
where country in (select country from mytable where name = 'James');