SQL查找相同的列数据

时间:2011-02-04 10:50:21

标签: php sql mysql

我有一张约15列的表格。我希望能够做的是选择一系列ID,并将所有列数据都相同,呈现给我。

在那一刻,我的结构如下:

SELECT id, col_a, col_b ... count(id)
FROM table
GROUP BY col_a, col_b ... 

返回组合在一起的行,这些行在所有行中具有相同的数据 - 这是我想要的一半,但理想情况下我希望能够获得具有该值的单行(如果它对于每个行id都相同) )如果存在单一差异,则为NULL。

我不确定它是否可行,但我宁愿看看它是否在SQL查询中是可行的,而不是为PHP编写一些循环逻辑来检查每一行的相似性。

谢谢,

更新:

为了使这个保持最新,我通过编写一个PHP函数来解决这个问题,该函数可以找到重复的函数,然后显示差异。但是我现在已经为每个列创建了一个表,并将列作为对其他表的引用。

E.G。在MainTable中,ColA现在引用表ColA

我目前仍在使用PHP解决问题,主要是因为我认为它仍然存在上述问题,但至少现在我没有存储重复信息。

3 个答案:

答案 0 :(得分:0)

通过以下方式与组进行子查询的连接:

SELECT a.id, b.col_a, b.col_b ... b.count)
FROM table a 
LEFT JOIN (
    SELECT id, col_a, col_b ... count(id) "count"
    FROM table GROUP BY col_a, col_b ...
)b on a.id = b.id

这样外部将选择所有行。

如果您仍想分组答案,可以使用UNION

SELECT id, col_a ...
WHERE id NOT IN ("SUBQUERY WITH GROUP BY")
UNION
"SUBQUERY WITH GROUP BY"

不是最好的解决方案,但应该可行

答案 1 :(得分:0)

这是一个毛茸茸的事情,但你可以像David Martensson建议的那样做,我会这样写,但是:

Select a.id, a.col1, a.col2, a.col3
FROM myTable a, myTable b
WHERE a.id != b.id
and a.col1 = b.col1
and a.col2 = b.col2
and a.col3 = b.col3

这将为您提供唯一的ID,但每个结果对于第1,2和3列具有相同的值。但是,我同意您的问题的一些评论者,您应该考虑替代数据结构,因为这可以更好地利用RDBMS模型。在这种情况下,您需要有2个表:

表名:MyTableIds 字段:id,attrId

表名:MyTableAttrs 字段:attrId,attr1,attr2,attr3,ect

通常,如果您有多个记录要复制的数据,则应将其拉入第二个表并创建关系,这样您只需将重复数据存储一次,然后多次引用它

答案 2 :(得分:0)

从理解你的问题看来,这似乎是可行的。

这是一种可能的模式:

SELECT
  /* GROUP BY columns */
  col_A,
  col_B,
  ...

  /* aggregated columns */
  CASE MIN(col_M) WHEN MAX(col_M) THEN MIN(col_M) ELSE NULL END,
  CASE MIN(col_N) WHEN MAX(col_N) THEN MIN(col_N) ELSE NULL END,
  ...
  COUNT(...),
  SUM(...),
  WHATEVER(...),
  ...
FROM ...
GROUP BY col_A, col_B, ...