【问题标题】:Check distinct value ignoring other columns data检查忽略其他列数据的不同值
【发布时间】:2012-04-13 12:36:43
【问题描述】:

如果我有这样的数据表:

   Col1 |  Col2 | Col3

   111  |  a     | 

   222  |  b     |  1

   111  |        |

我希望只从我的临时表中选择 Distinct Col1 然后插入到另一个表中。但是对于上面的表,第二个“111”也会被选中,因为它有不同的 Col2 数据。

或者如果我选择 Distinct Col1 only ,其他列数据将被忽略...

那么有什么办法可以解决这个问题吗?我希望只选择插入的第一行相同的 Col1 数据。

我正在使用这个查询:

mysql_query("INSERT DELAYED INTO Tableb (Col1,Col2,Col3) SELECT DISTINCT Col1,Col2,Col3 FROM TempTable"); 

感谢您的回复。

PS:我不确定如何根据我的问题指定标题...也许有人可以帮助我。

【问题讨论】:

  • 你如何确定哪个 '111' 是最新的?
  • @Vikram 感谢您的回复。应该使用最早的ID,第一个插入的数据。

标签: php sql distinct


【解决方案1】:

也许是这样的(这可能是你想要的):

INSERT INTO Tableb
(
    Col1,Col2,Col3
)
SELECT
    t.Col1,
    MAX(t.Col2) AS Col2,
    MAX(t.Col3) AS Col3
FROM
    TempTable as t
GROUP BY
    t.Col1

或者如果你想要 MIN 值。像这样:

INSERT INTO Tableb
(
    Col1,Col2,Col3
)
SELECT
    t.Col1,
    MIN(t.Col2) AS Col2,
    MIN(t.Col3) AS Col3
FROM
    TempTable as t
GROUP BY
    t.Col1

【讨论】:

  • 感谢您的回答,我正在尝试。我能知道“t”是什么意思吗?例如 t.Col1,t.Col2.. 它显示“未知列 t.xxx”。
  • 很抱歉。更新了答案
  • 感谢您的更新。我试过了,但似乎我遇到了一个小问题,不知道是什么问题,但会再次调查,非常感谢你的帮助,你的回答给了我一个很好的概念。
  • 没问题。乐意效劳。如果您对答案没问题,您可能会考虑接受它?
【解决方案2】:

首先,您需要确定 col1 的每个不同值的最后一个 ID,然后选择包含此 ID 的行:

INSERT DELAYED INTO Tableb (Col1,Col2,Col3) 
SELECT TempTable.Col1, TempTable.Col2, TempTable.Col3
from TempTable
inner join
(
   select Col1, max(ID) ID
     from TempTable
    group by Col1
) c
ON TempTable.ID = c.ID

内部查询返回要插入的 ID,因此只需将它们连接到原始表以过滤表。

如果要首先插入 TempTable 记录,请将 max(id) 替换为 min(id)。

【讨论】:

  • 感谢您的回答,它完美运行,感谢您的帮助。
【解决方案3】:
mysql_query("INSERT DELAYED INTO Tableb (Col1,Col2,Col3) SELECT Col1, MAX(t.Col2) AS Col2, MAX(t.Col3) AS Col3 FROM TempTable GROUP BY Col1");

【讨论】:

    【解决方案4】:
    INSERT DELAYED INTO Tableb (Col1,Col2,Col3) SELECT Col1,Col2,Col3 FROM TempTable GROUP BY Col1 ORDER BY [your way of sorting here]
    

    这样可以吗?

    【讨论】:

      猜你喜欢
      • 2011-12-24
      • 1970-01-01
      • 2020-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多