0

我仍然是 mysql 的新手,直到现在我才不得不在我的代码中使用基本查询。但我现在需要以下内容。我有一个包含行的数据库:id、firstname、lastname、email、companyid。

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

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

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

问候

4

4 回答 4

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 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
于 2013-06-04T08:37:53.520 回答
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 一行

参考: http ://kristiannielsen.livejournal.com/6745.html

于 2013-06-04T08:59:39.310 回答
0

您可能想要使用 HAVING 子句:

SELECT companyid,COUNT(id) as cnt FROM `contacts` group by companyid having COUNT(ID)=1
于 2013-06-04T08:42:58.183 回答
0

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

SELECT *, COUNT(companyid) 
FROM CONTACTS
GROUP BY 1
HAVING COUNT(companyid) = 1
于 2013-06-04T08:43:26.647 回答