Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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
在mysql中选择,其中某一行的计数仅为1_Mysql - Fatal编程技术网

在mysql中选择,其中某一行的计数仅为1

在mysql中选择,其中某一行的计数仅为1,mysql,Mysql,我还是mysql的新手,到目前为止,我只需要在代码中使用基本查询。但我现在需要以下信息。我有一个包含以下行的数据库:id、firstname、lastname、email、companyid 我想选择companyid在整个数据库中只有一个计数的所有值。一些联系人共享一个公司。其次,如果一家公司在数据库中有超过1个条目,我需要为该公司选择所有首先创建的联系人。尝试了一组,不同的,但无法让这个工作 SELECT * FROM `contacts` WHERE (SELECT COUNT(compa

我还是mysql的新手,到目前为止,我只需要在代码中使用基本查询。但我现在需要以下信息。我有一个包含以下行的数据库:id、firstname、lastname、email、companyid

我想选择companyid在整个数据库中只有一个计数的所有值。一些联系人共享一个公司。其次,如果一家公司在数据库中有超过1个条目,我需要为该公司选择所有首先创建的联系人。尝试了一组,不同的,但无法让这个工作

SELECT * FROM `contacts` WHERE (SELECT COUNT(companyid) FROM `contacts`) <2
尝试过这个,但显然不正确

问候语第一项任务:

SELECT c.*
FROM contacts c
JOIN (SELECT companyid, COUNT(*) c
      FROM contacts
      GROUP BY companyid
      HAVING c = 1) c1
ON c.companyid = c1.companyid
第二项任务:

SELECT c.*
FROM CONTACTS c
JOIN (SELECT companyid, MIN(created) mindate, COUNT(*) c
      FROM contacts
      GROUP BY companyid
      HAVING c > 1) c1
ON c.companyid = c1.companyid AND c.created = c1.mindate
要基于第一个查询执行更新,请执行以下操作:

UPDATE contacts c
JOIN (SELECT companyid, MIN(created) mindate, COUNT(*) c
      FROM contacts
      GROUP BY companyid
      HAVING c > 1) c1
ON c.companyid = c1.companyid AND c.created = c1.mindate
WHERE yourcode = 1
SET somecolumn = newvalue

您可能希望使用HAVING子句:

SELECT companyid,COUNT(id) as cnt FROM `contacts` group by companyid having COUNT(ID)=1

我不确定这是否能解决你的问题,但你可以试试这个

SELECT *, COUNT(companyid) 
FROM CONTACTS
GROUP BY 1
HAVING COUNT(companyid) = 1
MINid将选择在有多个联系人的公司上创建的第一个联系人。 GROUP BY将确保每个companyid一行


参考资料:

哇,这太棒了,而且速度也很快。我看到Mysql还有很多东西要学。我自己都没想到这个密码。对于扩展我对mysql的一般知识,你有什么建议吗?很抱歉问这么多,但是我如何更改第一个代码,将1列的所有值更新为yourcode=true的某个值?答案中添加了。我认为你需要学习SQL。你不能依靠免费的志愿者为你做所有的节目。
SELECT c.id, c.firstname, c.lastname, c.email, c.companyid
FROM contacts c
INNER JOIN (
  SELECT MIN(id) as id FROM contacts GROUP BY companyid
) c2 ON c2.id = c.id