这是“双重”表概念的扩展(为一个查询动态创建临时表并在之后直接丢弃)
我正在尝试将多行dual
表连接到另一个表,以避免必须使用1个语句多次使用不同的参数运行相同的查询。
我遇到的一个问题是双表的联合非常慢,我不知道有任何更有效的方法来完成以下操作。 (加入50对偶时100毫秒)
SELECT
b.id,
b.ref_unid,
a.date
FROM
(
SELECT
'b8518a84-c501-11dd-b0b6-001d7dc91168' as unid,
'2010-01-05' as date
UNION
SELECT
'b853a1f2-c501-11dd-b0b6-001d7dc91168',
'2010-01-06'
UNION
SELECT
'b8557bd0-c501-11dd-b0b6-001d7dc91168',
'2010-01-07'
/* ... */
) as a
join other_table b
ON
b.ref_unid = a.unid
还有另一种方法可以实现这个目标吗?
是否有类似于insert into values语句的语法可以实现该目标,例如:
SELECT
unid,
id
FROM
(
WITH (unid, date) USING VALUES
(
('b8518a84-c501-11dd-b0b6-001d7dc91168','2010-01-05'),
('b853a1f2-c501-11dd-b0b6-001d7dc91168','2010-01-06'),
('b8557bd0-c501-11dd-b0b6-001d7dc91168','2010-01-07'),
/* ... */
)
) as a
join other_table b
ON
b.ref_unid = a.unid
我正在寻找一个1语句解决方案。无法多次访问数据库。
答案 0 :(得分:1)
没有其他约定我知道在MySQL中可用于在单个语句中构造派生表。如果这涉及单个列,则在~50个值时,可以将其转换为使用IN
子句。
表现最佳的方法是将数据加载到一种或多种形式的表中 - 在MySQL中,暂时使用我建议使用MEMORY引擎。在大约50个元组时,我不得不想知道为什么数据不在数据库中......