Mysql 如何选择两个字段唯一的记录

Mysql 如何选择两个字段唯一的记录,mysql,Mysql,我有一张像这样的桌子: +-------------+----------+---------------+------------+ | Contract_ID | Name | Username | Password | +-------------+----------+---------------+------------+ | 12345671 | Facebook | john.doe | password | | 12345672

我有一张像这样的桌子:

+-------------+----------+---------------+------------+
| Contract_ID |   Name   |   Username    |  Password  |
+-------------+----------+---------------+------------+
|    12345671 | Facebook | john.doe      | password   |
|    12345672 | Google   | john.doe      | password   |
|    12345673 | Apple    | martha.malone | doodlebear |
|    12345674 | Samsung  | jimmy47       | parkour445 |
|    12345675 | HTC      | rick.grimes   | simpsons33 |
+-------------+----------+---------------+------------+
我只想选择用户名/密码组合与合同id之间的比率为1:1的记录。在这种情况下,这意味着我要选择此表中的第3、第4和第5条记录

我尝试了不同关键字的不同组合,但这似乎不是正确的选择。是否有可以返回此信息的查询


作为一种额外的问题:是否有一个查询可以产生相反的结果(即,只有合同ID和用户名/密码组合之间的比率大于1:1的记录)?

分组依据(名称、密码)不起作用?

分组依据(名称、密码)不起作用?

您应该将GROUP BY子句与HAVING子句一起使用,例如:

SELECT Username, Password FROM Table
GROUP BY Username, Password
HAVING COUNT(*) = 1
相反的是:

SELECT Username, Password FROM Table
GROUP BY Username, Password
HAVING COUNT(*) > 1

应将GROUP BY子句与HAVING子句一起使用,例如:

SELECT Username, Password FROM Table
GROUP BY Username, Password
HAVING COUNT(*) = 1
相反的是:

SELECT Username, Password FROM Table
GROUP BY Username, Password
HAVING COUNT(*) > 1

非常顽皮的做法,一点也不好,但它确实有效:

    select distinct
    least(col1, col2) as value1
  , greatest(col1, col2) as value2
from yourtable

非常顽皮的做法,一点也不好,但它确实有效:

    select distinct
    least(col1, col2) as value1
  , greatest(col1, col2) as value2
from yourtable

因此,是否要选择用户名和密码组合唯一的所有合同ID?如果第一个条目是john.doe和password1234,是否希望查询返回表中的所有结果?是。某些用户名和/或密码不是唯一的。我只是在寻找这两者的唯一组合,所以您希望选择用户名和密码组合唯一的所有合同ID?如果第一个条目是john.doe和password1234,您希望查询返回表中的所有结果吗?是的。某些用户名和/或密码不是唯一的。我只是在寻找这两种方法的独特组合。第一个查询非常有效,谢谢。我还想返回Contract_ID,因此我将其添加到两个查询中。但是,当我运行第二个查询时,它不会返回所有记录。我的意思是,在问题中使用的示例中,我希望它返回两行,表中的前两行。相反,它只返回一个结果,即第一行。MySQL允许您将不在GROUPBY子句中的列添加到SELECT列表中。请注意,如果每组中有多行,则结果可能不可预测。当然,当COUNT(*)=1生效时,这不是问题。您可以添加
GROUP\u CONCAT(Contract\u id)作为第二条语句的
选择
的合同ID,以获得具有相同用户名和密码的合同ID列表。是否有方法可以选择表中所有记录与第一次查询中给出的唯一记录之间的差异?第一次查询非常有效,谢谢。我还想返回Contract_ID,因此我将其添加到两个查询中。但是,当我运行第二个查询时,它不会返回所有记录。我的意思是,在问题中使用的示例中,我希望它返回两行,表中的前两行。相反,它只返回一个结果,即第一行。MySQL允许您将不在GROUPBY子句中的列添加到SELECT列表中。请注意,如果每组中有多行,则结果可能不可预测。当然,当COUNT(*)=1生效时,这不是问题。您可以添加
GROUP\u CONCAT(Contract\u id)在第二条语句的
中选择
作为合同ID,以获得具有相同用户名和密码的合同ID列表。是否有办法选择表中所有记录与第一次查询中给出的唯一记录之间的差异?