一尘不染

MySQL:在选择语句内创建内联表?

sql

MySql中有没有一种方法可以创建用于联接的内联表?

就像是:

SELECT LONG [1,2,3] as ID, VARCHAR(1) ['a','b','c'] as CONTENT

那会输出

|  ID  |  CONTENT  |
| LONG | VARCHAR(1)|
+------+-----------+
|   1  |    'a'    |
|   2  |    'b'    |
|   3  |    'c'    |

我可以在这样的联接中使用:

SELECT 
  MyTable.*,
  MyInlineTable.CONTENT
FROM
  MyTable
  JOIN 
    (SELECT LONG [1,2,3] as ID, VARCHAR(1) ['a','b','c'] as CONTENT MyInlineTable)
  ON MyTable.ID = MyInlineTable.ID

我意识到我可以做到

SELECT 1,'a' UNION SELECT 2,'b' UNION SELECT 3,'c'

但这似乎很邪恶

我不想执行存储过程,因为在每次查询和数据大小上,a,b,c都可能发生变化。另外,存储过程也需要保存在数据库中,我不想只为此修改数据库。视图是一回事。

我真正想要的是SELECT 1,'a' UNION SELECT 2,'b' UNION SELECT 3,'c'使用更好的语法的东西。


阅读 236

收藏
2021-03-10

共1个答案

一尘不染

我真正在寻找的是使用更好的语法执行SELECT 1,’a’UNION SELECT 2,’b’UNION SELECT 3,’c’的操作。

是的,可以使用MySQL 8.0.19中引入的 ROW
CONSTRUCTOR

VALUES ROW (1,'a'), ROW(2,'b'), ROW(3,'c')

并使用JOIN:

SELECT *
FROM tab 
JOIN (VALUES ROW (1,'a'), ROW(2,'b'), ROW(3,'c') ) sub(id, content)
  ON tab.id = sub.id;

db <>
fiddle演示

2021-03-10