我在书中使用了相同的查询。那么,为什么我的输出与书中的输出有很大的不同呢?这本书还说:“\都不会导致字母数字值的级联,但是它被看作是一个OR操作符来组合谓词。“组合谓词的OR运算符”是什么意思?
......etc
发布于 2012-07-11 04:48:33
在MySQL中,必须使用CONCAT()
将列的值以一个字符串的形式组合在一起:
SELECT playerno, CONCAT(town, ' ', street, ' ', houseno)
FROM players
WHERE town = 'stratford';
您的书中可能提到了甲骨文级联语法,它使用||
连接字符串。默认情况下,MySQL将||
视为两个或多个条件之间的OR操作符,如果它们中的任何一个计算为"true“,则返回1
。
但是,正如satdev86的答案所指出的,只有在执行查询之前手动设置模式MySQL时,||
才允许使用||
作为连接操作符。
编辑:
在您的书中,它清楚地说明了必须设置MySQL sql_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-11 04:54:21
因为,正如书中所述,如果它们使用了sql模式PIPES_AS_CONCAT,那么您的管道将充当连接运算符。
SET sql_mode='PIPES_AS_CONCAT';
select playerno, town || '' || street || '' || houseno
from players
where town = 'stratford';
将给出您在书中看到的输出:)
https://stackoverflow.com/questions/11425637
复制相似问题