繁体   English   中英

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

[英]Check distinct value ignoring other columns data

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

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

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

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

首先,您需要确定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)。

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");
INSERT DELAYED INTO Tableb (Col1,Col2,Col3) SELECT Col1,Col2,Col3 FROM TempTable GROUP BY Col1 ORDER BY [your way of sorting here]

那样做吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM