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'使用更好的语法的东西。
我真正在寻找的是使用更好的语法执行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演示