我发现了如何在不使用临时表的情况下从值列表制作结果集:
select 12 as id
union all
select 155 as id
union all
select 139 as id
union all
select 11 as id
此结果集可以在以后的各种联接中使用。
现在,我正在寻找一种缩短传递给MySQL的SQL字符串的可能性。理想情况下,可能会出现以下情况:
select (12, 155, 139, 11) as id;
但是MySQL中没有这样的语法。有什么想法吗?
您要查找的内容在SQL标准中称为“表值构造函数”,它的工作方式如下:
SELECT id FROM (VALUES (12), (155), (139), (11)) AS t(id)
不幸的是,它在MySQL中不可用。据我所知,至少这些数据库支持它:
至少这些数据库不需要,并且需要使用来模拟它UNION ALL
:
如果这仅仅是语法(不是性能),那么您当然也可以查询已知至少包含要查找的值的表,然后简单地使用IN
谓词列出这些值:
SELECT id FROM some_table WHERE id IN (12, 155, 139, 11)
当然,这可能比UNION ALL
解决方案要慢得多。
但是在语法上,考虑到根据SQL标准的事实,这是一个明显的解决方法,IN
谓词的“在值列表中”实际上只是“表值构造函数”的语法糖(尽管我不相信任何SQL引擎会真正实现该功能)替代语法):
8.4 <in predicate>
2) Let IVL be an <in value list>.
( IVL )
is equivalent to the <table value constructor>:
( VALUES IVL )
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句