1

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

   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:我不确定如何根据我的问题指定标题......也许有人可以帮助我。

4

4 回答 4

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
于 2012-04-13T12:42:11.417 回答
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 记录,请将 max(id) 替换为 min(id)。

于 2012-04-13T12:48:06.307 回答
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");
于 2012-04-13T12:44:11.500 回答
0
INSERT DELAYED INTO Tableb (Col1,Col2,Col3) SELECT Col1,Col2,Col3 FROM TempTable GROUP BY Col1 ORDER BY [your way of sorting here]

这样做吗?

于 2012-04-13T12:44:51.103 回答