我有一个非常简单的问题,我无法解决。我需要这样做:

select distinct * from (1, 1, 1, 2, 5, 1, 6).

谁都能帮忙??

编辑

数据以文本文件的形式来自我们的一个客户。它是完全没有格式的(它是一个很长的文本行),但在Excel中可以这样做。但这对我来说并不实际,因为我需要在sql查询中使用这些值。每次需要运行查询时这样做并不方便。


当前回答

PostgreSQL提供了两种方法:

SELECT DISTINCT * FROM (VALUES('a'),('b'),('a'),('v')) AS tbl(col1)

or

SELECT DISTINCT * FROM (select unnest(array['a','b', 'a','v'])) AS tbl(col1)

使用数组方法,你也可以这样做:

SELECT DISTINCT * FROM (select unnest(string_to_array('a;b;c;d;e;f;a;b;d', ';'))) AS tbl(col1)

其他回答

如果您只想从单个表中选择某些值,您可以尝试这样做

select distinct(*) from table_name where table_field in (1,1,2,3,4,5)

eg:

select first_name,phone_number from telephone_list where district id in (1,2,5,7,8,9)

如果你想从多个表中选择,那么你必须选择UNION。

如果你只是想选择值1,1,1,2,5,1,6,那么你必须这样做

select 1 
union select 1 
union select 1 
union select 2 
union select 5 
union select 1 
union select 6

使用GROUP BY可以提供比DISTINCT更好的性能:

SELECT *
FROM
(
    VALUES
        (1),
        (1),
        (1),
        (2),
        (5),
        (1),
        (6)
) AS A (nums)
GROUP BY A.nums;

对我来说行之有效的一种技术是查询一个您知道其中有大量记录的表,其中只包括结果中的Row_Number字段

Select Top 10000 Row_Number() OVER (Order by fieldintable) As 'recnum' From largetable

将返回从1到10000条记录的结果集,在另一个查询中使用这个来给你想要的结果

要获得由逗号分隔的文本组成的长列表的不同值,最简单的方法是使用find an替换为UNION来获得不同的值。

SELECT 1
UNION SELECT 1
UNION SELECT 1
UNION SELECT 2
UNION SELECT 5
UNION SELECT 1
UNION SELECT 6

应用于由逗号分隔的文本组成的长行

用UNION SELECT查找并替换每个逗号 在语句前面添加一个SELECT

现在您应该有一个可以工作的查询

如果它是一个来自现有SQL表的参数列表,例如来自现有Table1的ID列表,那么你可以尝试这样做:

select distinct ID
      FROM Table1
      where 
      ID in (1, 1, 1, 2, 5, 1, 6)
ORDER BY ID;

或者,如果你需要参数列表作为一个SQL表常量(变量),试试这个:

WITH Id_list AS (
     select ID
      FROM Table1
      where 
      ID in (1, 1, 1, 2, 5, 1, 6)
)
SELECT distinct * FROM Id_list
ORDER BY ID;