【问题标题】:PHP/MySQL - select all rows where a field is uniquePHP/MySQL - 选择字段唯一的所有行
【发布时间】:2012-06-13 17:41:21
【问题描述】:

我有一张这样的桌子:

column_a  column_b
  foo        1
  bar        1
  bar        2
  baz        4

我想要以下结果,包含所有行,在 column_b 中具有唯一字段值:

  bar        2
  baz        4

foo(0) 和 bar(1) 都具有 column_b 值“1”,因此“1”不是唯一的。 是否有一个 MySQL 表达式可以过滤所有具有唯一 column_b 的行?

也许是这样的:

select * from table where isunique(column_b)

另外:我不需要DISTINCT之类的东西!

编辑(已解决):

感谢 YaK 和 jcho360,这就是解决方案:

select column_a, column_b from table group by column_b having count(column_b) = 1

select column_a, column_b, COUNT(1) AS total from table group by column_b having total = 1

(感谢 andrewtweber)

【问题讨论】:

  • 这些答案对您有帮助吗?标记一个为正确
  • @Nikolai Wüstemann:没问题,但我不介意 +1 ;)
  • 哦,我的错,我认为你需要更多的声誉才能做到这一点。
  • 不,我受够了,我完成了我的工作! ;) 谢谢!

标签: php mysql select unique


【解决方案1】:

使用 count 函数将提供一个选择,其中 column_b 中的值仅出现一次。试试这个:

select * from table group by (column_b) having count(column_b) = 1;

【讨论】:

  • HAVING COUNT(column_b) = 1 应该足够了,因为如果没有行,那么它根本不包含在结果中。更糟糕的是,如果您的 column_b 包含 NULL 值:那么它们的 COUNT() 等于 0,并且将被返回(带有“随机”值作为 column_a 值)
【解决方案2】:
SELECT column_a, column_b, COUNT(1) AS total
FROM table
GROUP BY column_b
HAVING total = 1

我相信这应该可行。这会将所有 column_b 组合在一起并计算有多少具有该特定值,然后将结果集限制为具有唯一 column_b 值的那些。

【讨论】:

    【解决方案3】:

    改用select unique(column_b), column_a, from table? :)

    修改错别字

    【讨论】:

    • -1:他们在哪个版本中引入了UNIQUE()函数?
    • 哎呀我的错,我认为 Oracle 语法的独特之处在于独特的工作方式:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 2017-06-18
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多