2013-06-04 138 views
0

我仍然是一个新手在mysql中,直到现在,我的代码中只需要使用基本查询。但我现在需要以下内容。我有一个数据库的行:id,名字,姓氏,电子邮件,companyid。在mysql中选择某个行只有一个计数为1

我想选择所有值,其中companyid在整个数据库中只有一个计数。 (一些联系人共享一家公司)。其次,我需要选择一家公司的所有第一次创建的联系人,其中一家公司的数据库中有多个条目。尝试了一群与组,明显,但不能让这个工作。

SELECT * FROM `contacts` WHERE (SELECT COUNT(companyid) FROM `contacts`) <2 

试过这个,但它不正确(显然)。

问候

回答

1

首要任务:

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:

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 
+0

哇,这是伟大的,还这么快。在我看到的Mysql中,我仍然有很多东西需要学习。我自己也没有想过这个代码。你有什么技巧可以开始扩展我对MySQL的一般知识吗? – Snuur

+0

对不起,请问这么多,但如何更改第一个代码,以更新1列的所有值到某个值(yourcode)= true? – Snuur

+0

已被添加到答复中。我认为你需要研究SQL。你不能依靠免费的志愿者为你做所有的编程。 – Barmar

0

您可能希望使用HAVING子句:

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

林不知道这是否会解决您的问题,但你可以试试这个

SELECT *, COUNT(companyid) 
FROM CONTACTS 
GROUP BY 1 
HAVING COUNT(companyid) = 1 
0
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 

MIN(ID),将选择创建的第一个(最老的)在公司里有多个联系人。 GROUP BY将确保每companyid一行

Refence:http://kristiannielsen.livejournal.com/6745.html

相关问题