检查忽略其他列数据的不同值

时间:2012-04-13 12:36:44

标签: php sql distinct

如果我有一个包含这样数据的表:

   Col1 |  Col2 | Col3

   111  |  a     | 

   222  |  b     |  1

   111  |        |

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

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

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

我正在使用此查询:

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

感谢您的回复。

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

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

首先,您需要确定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记录,请用min(id)替换max(id)。

答案 2 :(得分:0)

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");

答案 3 :(得分:0)

INSERT DELAYED INTO Tableb (Col1,Col2,Col3) SELECT Col1,Col2,Col3 FROM TempTable GROUP BY Col1 ORDER BY [your way of sorting here]

这样做吗?