【问题标题】:What is the reason for this mysterous SQL output ( using MariaDB )?这个神秘的 SQL 输出(使用 MariaDB)的原因是什么?
【发布时间】:2014-10-20 20:01:16
【问题描述】:

这是我在SQLZoo 网站的测试框中输入的查询,诚然是随机调整:

SELECT title || 'fo'
FROM movie
WHERE title IS NOT NULL
AND title like '%he%';

它会返回如下所示的异常输出:

title || fo
--------------------
0
1
1
1
1
1
1
/* etc etc just 0's and 1's */

而如果我只使用以下查询:

SELECT title 
FROM movie
WHERE title IS NOT NULL
AND title like '%he%';

然后我会得到我期望的非常合理的输出:

title
--------------------
Gone with the End
Dr. doLittle
Con Air.
/* et etc more movi */

所以我认为这个网站的后端使用了一个叫做 MariaDB 的东西(也许是 MySQL 的一个分支?)。

为什么我只能通过将标题与字符串连接起来得到0's1's 的输出?

准确的说是第六部——电影《卡萨布兰卡》的id是什么。 谢谢

【问题讨论】:

  • MySQL 正在返回 title || 'fo' 的真/假值
  • @MikeW - 啊,明白了!谢谢!!!
  • MySQL 中的串联是CONCAT(title, 'fo')

标签: mysql sql mariadb


【解决方案1】:

默认情况下,|| 是逻辑or 操作——不是字符串连接。所以,你的选择真的是:

select (title OR fo)

它只是检查一个或另一个是“真”(非零)。

运营商列表为here

您可以通过设置模式PIPES_AS_CONCAT 来更改此行为(请参阅here)。

【讨论】: