如果我有一个包含这样数据的表:
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:我不确定如何根据我的问题指定标题......也许有人可以帮助我。
答案 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]
这样做吗?