Mysql 查询以获取依赖于另一列的数据,但仅当该列出现一次时
我有一个MySQL表,如下所示:Mysql 查询以获取依赖于另一列的数据,但仅当该列出现一次时,mysql,select,Mysql,Select,我有一个MySQL表,如下所示: +--------------------------------------------+ | ID | State | Name | City | +--------------------------------------------+ | PA1 | PA | Foo | Philly | | VA1 | PA | Foo | Philly
+--------------------------------------------+
| ID | State | Name | City |
+--------------------------------------------+
| PA1 | PA | Foo | Philly |
| VA1 | PA | Foo | Philly |
| DC1 | VA | Foobar | Washington |
| ME2 | ME | Barfoo | Portland |
+--------------------------------------------+
现在,我想做一个SELECT语句,其中我只选择那些State=SUBSTR(ID,1,2)
的行,除非名称只在表中出现一次。换句话说,我想以下表结束:
+--------------------------------------------+
| ID | State | Name | City |
+--------------------------------------------+
| PA1 | PA | Foo | Philly |
| DC1 | VA | Foobar | Washington |
| ME2 | ME | Barfoo | Portland |
+--------------------------------------------+
在第二行中,State不等于ID的子字符串,并且该'Name'(在本例中为Foo)在表中多次出现,因此我们不获取该行。然而,我还想要第三行,即使State再次不等于ID的子字符串,因为“Name”在原始表中只出现一次
关于我可以使用什么查询来实现这一点,有什么想法吗?我已经玩了很长一段时间没有成功。谢谢 您可以在WHERE
子句中的EXISTS
中使用以下内容:
select *
from myTable
where State = SUBSTR(ID, 1, 2) or
Name in (select Name from myTable group by Name having count(*)=1)
select *
from yourtable t1
where state = SUBSTR(ID, 1, 2)
or exists (select count(Name) CountName, Name
from yourtable t2
where t1.name = t2.name
group by Name
having count(name) = 1)
看
返回结果:
| ID | STATE | NAME | CITY |
-------------------------------------
| PA1 | PA | Foo | Philly |
| DC1 | VA | Foobar | Washington |
| ME2 | ME | Barfoo | Portland |
取决于,OP首先声明“仅那些State=SUBSTR(ID,1,2)的行,除非名称只在表中出现一次”,然后声明“在表中出现多次,因此我们无法获得该行”。我不完全清楚什么是合适的,但无论哪种方法都可以使用have
subquery@paul我指的是或,如果解释不清楚,我很抱歉。不管怎样,我都成功了,谢谢@paul我将您的答案更新为使用或
,否则这不起作用,成为SQL Fiddle的公认答案+1毫无意义,尽管我选择了另一个答案,只是因为它对我很有效,而且来得稍微早一点。