代码之家  ›  专栏  ›  技术社区  ›  Alex Mcp

我非常讨厌MySQL(帮助构建查询)

  •  3
  • Alex Mcp  · 技术社区  · 16 年前

    我相信这是直截了当的:

    SELECT DISTINCT 'location' FROM myTable 它返回21000行,与我期望的差不多,但它只返回那一列。

    我想要的是把它们移到一个新的表中,但是每一个匹配都是整行的。

    我猜大概是 SELECT * from (SELECT DISTINCT 'location' FROM myTable) 或者类似的,但它说我有一个模糊的语法错误。

    有没有一种好方法可以一次抓住每一行的其余部分并将其移动到一个新表中?

    4 回复  |  直到 16 年前
        1
  •  8
  •   TMG    16 年前
    SELECT * FROM myTable GROUP BY `location`
    

    或者你想换张桌子

    CREATE TABLE foo AS SELECT * FROM myTable GROUP BY `location`
    
        2
  •  2
  •   Matthew Vines    16 年前

    返回整行的Distinct方法。所以你可以简单地使用

    SELECT DISTINCT * FROM myTable GROUP BY 'location'
    

    -id-   -location-
    1       store
    2       store
    3       home
    

        3
  •  1
  •   Larry Lustig    16 年前

    好吧,首先你要决定你真正想要的是什么。

     Location     OtherCol   StillOtherCol
    
     Place1       1          Fred
     Place1       89         Fred
     Place1       1          Joe
    

    在这种情况下,您要选择三行中的哪一行?当您谈到一个不同的位置时,您将这三行不同的数据压缩到一行中,将原始行从原始表移动到新表中是没有意义的,因为这些原始行不再存在于不同的结果集中(如果给定位置的所有其他列总是相同的,那么问题就更简单了:只需从表中选择DISTINCT*)。

    按位置从表组中选择*

    它将给出一个结果集,每个位置有一行,其他列的值以未定义的方式从原始数据派生。

        4
  •  0
  •   user unknown    16 年前

    所有列中具有相同值的多行没有任何意义。好的-这个问题可能是一种纠正这种情况的方法。

    考虑到这个表,id是PK:

    kram=# select * from foba;
     id | no |     name      
    ----+----+---------------
      2 |  1 | a
      3 |  1 | b
      4 |  2 | c
      5 |  2 | a,b,c,d,e,f,g
    

    SELECT * FROM foba WHERE id IN (SELECT  min (id) FROM foba GROUP BY no); 
     id | no | name 
    ----+----+------
      2 |  1 | a
      4 |  2 | c