SQL: 在结果中显示搜索参数,即使结果为空

SQL: Show search parameter in result, even if result is null

我有一个 table:

MyTable

ID | Name
1 | ok
2 | ok
3 | ok
4 | ok

我想编写查询,将 return 参数用于 "IN" 子句,即使结果为空(table 中不存在这样的行)。

类似于:

SELECT 
  ID,
  Name

FROM MyTable
WHERE ID in ('ABC', 'DEF', 1)

想要的结果: (补充:MyTable中没有定义X列)

X | ID | Name
ABC | Null | Null
DEF | Null | Null
1 | 1 | ok

可能吗?

我试过类似的东西:

SELECT 
 IFNULL(t2.ID,"?")

FROM MyTable t1
LEFT JOIN MyTable t2 ON t1.ID = t2.ID
 AND t2.ID IN ('ABC') 

这是一个奇怪的所需结果集,这是一种实现方法

select 
x.ID,
t.name from ( 
  select 'abc' as ID 
  union all 
  select 'def' 
  union all 
  select '1'
)x left join my_table t on t.ID = x.ID ;

你不能从 IN 列表中的值中做到这一点;不可能 return 结果集中的那些值。这不可能。

结果集中的行必须从 FROM 子句中的某些行源return编辑。通常,这是一个 table,但我们也可以使用内联视图作为行源。

要 return 您要查找的三行,请考虑以下查询:

   SELECT 'ABC' AS `X`
    UNION ALL
   SELECT 'DEF'
    UNION ALL
   SELECT 1

如果我们将其包裹在括号中,并为其分配一个别名,我们就可以像 table 一样引用它。例如:

SELECT v.X
  FROM (
         SELECT 'ABC' AS `X`
          UNION ALL
         SELECT 'DEF'
          UNION ALL
         SELECT 1
       ) v

请注意,括号内的查询替换了通常的 table。该查询分配了一个别名 v;我们基本上创建了一个名为 v.

的 table

一旦克服了困难,就很容易了。向要从匹配值

中检查的 table 添加外连接
SELECT v.X
     , t.ID
     , t.Name
  FROM (
         SELECT 'ABC' AS `X`
          UNION ALL
         SELECT 'DEF'
          UNION ALL
         SELECT 1
       ) v
  LEFT
  JOIN MyTable t
    ON t.ID = v.X
 ORDER BY v.X

注意:混合数据类型(字符串文字和数字文字)有点奇怪...列 X 将具有单一数据类型 returned,您将希望它与 ID 列的数据类型相匹配。 (我怀疑 'ABC''DEF' 只是您示例中给出的一些占位符。)关键是,要注意隐式数据类型转换。如果您需要进行数据类型转换,通常最安全的做法是使用适当的表达式来明确这些转换,例如CAST(xCONVERT(xSTR_TO_DATE(xx+0