动态使用MySQL,无需表

时间:2013-12-17 16:45:02

标签: mysql

是否可以动态使用MySQL来实现以下内容:

SELECT DISTINCT x FROM ('aaa', 'bbb', 'aaa', 'ccc') x;

其中,部分'aaa', 'bbb', 'aaa', 'ccc' 表示以逗号分隔的1000000值列表不是表名,而不是列名)(对不起混淆)。

所以我所能做的就是复制并粘贴这个以逗号分隔的列表。

我无法围绕所有值包装UNION。

预期产出:

x
------
aaa
bbb
ccc

为什么不使用命令行工具?

我喜欢MySQL的语法,如何操作数据,GROUPING,SORTING,...... MySQL是处理数据集的最佳和最简单的方法。

再次:

列表定义为:

'aaaa',
'bbbbb',
'aabb',
'ffff',
'dfdff',
'aabb',
'ddsss'
[+ 1000 of those lines]

现在我想复制并粘贴此列表并对其执行MySQL操作。例如:

SELECT DISTINCT [paste list here];

或者:

SELECT * FROM [此处粘贴列表] WHERE值LIKE'aaa%'

3 个答案:

答案 0 :(得分:7)

你在找这样的东西吗?

SELECT DISTINCT a.x 
FROM 
(SELECT 'aaa' AS x
UNION ALL
SELECT 'bbb'
UNION ALL
SELECT 'aaa'
UNION ALL
SELECT 'ccc') a

会导致

|   X |
|-----|
| aaa |
| bbb |
| ccc |

See a demo

如果您有许多值,则应将它们加载到临时表中并在临时表上运行DISTINCT

CREATE TEMPORARY TABLE [IF NOT EXISTS] listOfValues (
    value varchar(10)
);

INSERT INTO listOfValues (value)
('aaa'),
('bbb'),
('aaa'),
('ccc');

SELECT DISTINCT value FROM listOfValues;

答案 1 :(得分:6)

根据您更新的问题,您可以创建一个临时表,使用LOAD DATA INFILE(还有command line选项),最后在行上运行DISTINCT。没有办法" copy&粘贴" 它,除非你想把它放在一个blob或长文本中,并编写一个超出MySQL设计范围的解析器。

答案 2 :(得分:0)

SELECT 'aaa'
UNION
SELECT 'bbb'
UNION 
SELECT 'aaa'
UNION 
SELECT 'ccc'

会工作

Union将删除重复项,Union all保留重复项 想要使用如此多的价值观,可以看看这里

remove dups from many csv files

除非有某种原因它实际上需要在SQL中解决