mysql - SQL : Show search parameter in result, 即使结果为空

标签 mysql null

我有一张 table :

我的表格

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

我想编写一个查询,它将返回“IN”子句中使用的参数,即使结果为空(表中不存在此类行)。

类似于:

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') 

最佳答案

您无法通过 IN 列表中的值执行此操作;不可能在结果集中返回这些值。这是不可能的。

结果集中的行必须从 FROM 子句中的某个行源返回。通常,这是一个表,但我们也可以使用内联 View 作为行源。

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

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

如果我们将其括在括号中,并为其指定一个别名,我们就可以像引用表一样引用它。例如:

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

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

一旦你克服了这个困难,一切就很容易了。将外部联接添加到要检查匹配值的表

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 将返回单个数据类型,您将希望它与 ID 列的数据类型匹配。 (我怀疑 'ABC''DEF' 只是示例中给出的一些占位符。)重点是,要小心隐式数据类型转换。如果您需要进行数据类型转换,通常最安全的方法是使用适当的表达式进行显式转换,例如CAST(xCONVERT(xSTR_TO_DATE(xx+0) 等

关于mysql - SQL : Show search parameter in result, 即使结果为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30507261/

相关文章:

mysql - MsSql 计划触发的事件

JavaScript - 检查数组中的所有值是否都不是 Null - Array/Each/

c - 在 Windows 上删除名为 "NUL"的文件

PostgreSQL 9.1.9。使用与可以为空的字段连接的字符串更新字段会出错

java - 组织.hibernate.exception.SQLGrammarException : Table 'XXX' doesn't exist

python - 缺少 mysql.sock;产生 OperationalError : (2002, "Can' t 通过套接字 '/tmp/mysql.sock' (2)"连接到本地 MySQL 服务器"

mysql - 在 ubuntu oneiric 上编译 mysql 的问题

MySQL:通过公共(public)标签匹配对象

mysql - 在 mysql 中声明 NULL 值

java - @InjectMocks 后为空