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

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

谁都能帮忙??

编辑

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


当前回答

从用户id列表中选择用户id: SELECT * FROM my_table WHERE user_id IN (1,3,5,7,9,4);

其他回答

您尝试过使用下面的语法吗?

select * from (values (1), (2), (3), (4), (5)) numbers(number)

要获得由逗号分隔的文本组成的长列表的不同值,最简单的方法是使用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 Server 2008及以上版本上使用: 你可以用

SELECT DISTINCT *
FROM (
  VALUES (1), (1), (1), (2), (5), (1), (6)
) AS X(a)

有关更多信息,请参阅:

官方的女士 http://www.sql-server-helper.com/sql-server-2008/row-value-constructor-as-derived-table.aspx

这适用于SQL Server 2005,如果有最大数量:

SELECT * 
FROM
  (SELECT ROW_NUMBER() OVER(ORDER BY a.id) NUMBER
  FROM syscomments a
  CROSS JOIN syscomments b) c
WHERE c.NUMBER IN (1,4,6,7,9)

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)