简体   繁体   English

MySQL选择列值唯一的地方

[英]MySql Select Where Column Value Is Unique

My table people_jobs : 我的桌子people_jobs

+--------+--------+
|  NAME  |  JOB   | 
+--------+--------+
|  John  |  Actor | 
+--------+--------+
|  Jane  | Driver | 
+--------+--------+
|  Bill  |  Actor | 
+--------+--------+
|  John  |  Cook  | 
+--------+--------+

I'm looking to select all names with the job actor where the name column would be unique. 我正在寻找与工作演员一起选择的所有名称,其中名称列将是唯一的。 The desired query output here would be just Bill . 此处所需的查询输出仅为Bill

Something like: 就像是:

SELECT name FROM people_jobs WHERE job LIKE "actor" AND COUNT(SELECT * FROM people_jobs WHERE name LIKE name) = 1;

This is apparently bad syntax and I couldn't get GROUP BY to work... Thoughts? 这显然是错误的语法,我无法让GROUP BY工作...有什么想法吗?

Why a subselect? 为什么要进行子选择?

SELECT name, COUNT(*) AS cnt
FROM people_jobs
WHERE job='Actor'
GROUP BY name
HAVING cnt = 1

Ok, now I see the problem. 好的,现在我看到了问题。 Try this instead: 尝试以下方法:

SELECT name, SUM(JOB='Actor') AS actor_cnt, COUNT(*) as job_cnt
FROM people_jobs
GROUP BY name
HAVING (actor_cnt = 1) AND (job_cnt = 1)

This'll figure out how many people are actors, and count how many jobs they have, and return ONLY the people whose only job is acting. 这将确定有多少人是演员,并计算他们有多少工作,并且仅返回唯一从事表演的人。

select name
from people_jobs
where name in (
  select name
  from people_jobs
  group by name
  having count(name) = 1
) and job like 'actor'

This example is simple for understanding, but I like another one: 这个例子很容易理解,但是我喜欢另一个例子:

SELECT name
FROM people_jobs
GROUP BY name
HAVING COUNT(name) = 1 AND sum(job = 'Actor') = 1
SELECT name, COUNT(*) c 
FROM people_jobs 
WHERE job = 'Actor' 
GROUP BY name HAVING c = 1
SELECT DISTINCT x.* 
           FROM people_jobs x 
           LEFT 
           JOIN people_jobs y 
             ON y.name = x.name 
            AND y.job <> x.job 
          WHERE x.job = 'actor' 
            AND y.name IS NULL;

I would use NOT EXISTS on this context: 我会在这种情况下使用NOT EXISTS:

SELECT name
FROM   people_jobs
WHERE  job = 'actor'
       AND NOT EXISTS (SELECT * FROM people_jobs pj
                       WHERE pj.name = people_jobs.name AND pj.job != 'actor')

轻松解决您的问题:

SELECT distinct name FROM people_jobs WHERE job = "Actor"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM