0

我在书中使用了相同的查询。那么,为什么我的输出与书中给出的有很大不同?书中还说“|| 运算符不会导致字母数字值的连接,但它被视为组合谓词的 OR 运算符”。“用于组合谓词的 OR 运算符”是什么意思?

  • 数据库:网球
  • 表:玩家
  • 列:playerno(pk)、town、street、houseno ...等。

  • 问题:获取居住在stratford的每个玩家的玩家编号和地址

  • 询问:

    select playerno, town || '' || street || '' || houseno
    from players 
    where town = 'stratford';
    
  • 书的结果:

    2   Stratford Stoney Road 43
    6   Stratford Haseltine lane 80
    

......ETC

  • 我的结果(使用相同的查询):

    2   1
    6   1
    7   1
    39  1
    57  1
    83  1
    100 1 
    
4

2 回答 2

1

因为,根据本书,如果他们使用了 sql 模式 PIPES_AS_CONCAT,那么您的管道将充当连接运算符。

SET sql_mode='PIPES_AS_CONCAT';
select playerno, town || '' || street || '' || houseno
from players 
where town = 'stratford';

会给你在书中看到的输出:)

于 2012-07-11T04:54:21.220 回答
0

在 MySQL 中,您必须使用CONCAT()将列的值放在一个字符串中:

SELECT playerno, CONCAT(town, ' ', street, ' ', houseno)
FROM   players 
WHERE  town = 'stratford';

您的书可能指的是用于连接字符串的Oracle 连接语法||。默认情况下,MySQL 将||两个或多个条件之间的 OR 运算符视为,1如果其中任何一个评估为“真”,则返回。

但正如 satdev86 的回答中所指出的,只有在执行查询之前手动设置模式时,MySQL允许将用作||连接运算符。PIPES_AS_CONCAT


编辑:

在您的书中,它明确指出您必须设置 MySQLsql_mode才能使示例正常工作。它在您的 SQL 示例之前的页面上:

http://books.google.com/books?id=c5G42OHT96cC&pg=PT160&lpg=PT160&dq=%22This+specification+is+needed+for+the+following+examples.+It+applies+only+to+the+current+ session.%22&source=bl&ots=6b6zeFbM-2&sig=3a54S4vbgmKbPBqVbbR8OdxLLI8&hl=en&sa=X&ei=Nwz9T6fKAcfI2gWZhfDTBg&ved=0CCEQ6AEwAA

于 2012-07-11T04:48:33.700 回答