mysql 根据 select 中的值创建命名表

标签 mysql sql

我有一个表,System,其中有一堆字段,包括 System.serial。 我有一个序列号列表,我想获取其状态。

足够简单:

Select * from System where System.serial in ('s1','s2', 'sn');

然而,序列号列表也有不在 System 表中的序列号。 显然它们不在结果中。

我希望丢失的连续出版物也显示在结果中,但没有数据。

我能想到的最好的方法是制作一个包含一列的临时表,serial,然后 left join System 就可以了。

如何创建临时表来做到这一点?

类似于:

Select listOfSerials.serial, System.* 
from (Select ('s1','s2', 'sn') as serial ) as ListOfSerials 
left join System on System.serial = ListOfSerials.serial;

谢谢, 瑞安

最佳答案

您的解决方案是正确的,即创建一个虚拟表,用于对您的真实数据进行 LEFT JOIN。

您可以将派生表创建为一系列 UNIONed SELECT 语句,这些语句选择没有表引用的文字值。

SELECT listOfSerials.serial, System.* 
FROM (
    SELECT 's1' AS serial
    UNION SELECT 's2'
    UNION SELECT 'sn'
) AS ListOfSerials 
LEFT JOIN System ON System.serial = ListOfSerials.serial;

只需要在UNION中的第一个SELECT中定义一个列别名即可。其余部分需要使用该列别名。

关于mysql 根据 select 中的值创建命名表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55291263/

相关文章:

mysql - 删除新表

php - 将变量传递给 ORDER BY MySQL 语句

sql - 如何在 SQL 中将 ENUM 数据类型设为小写?

mysql - 从列名中删除后缀

当有 '('但没有 ')'时mysql查询错误

mysql - 选择多列并将其设置为 DTO 列表

java - 通过 JDBC 将 DDL 与 SELECT 混合时为 "ERROR: cached plan must not change result type"

java - java中如何避免重复的数据库连接?

mysql - 我们可以将什么条件作为 JOIN 的 ON 的一部分?

php - PHP strtotime无法与while数组一起使用