我在书中使用了相同的查询。那么,为什么我的输出与书中的输出有很大的不同? 该书还说“||运算符不会导致字母数字值的串联,但它被视为组合谓词的OR运算符”。 “组合谓词的OR运算符”是什么意思?
列:playerno(pk),城镇,街道,houseno ......等。
问题: 获取居住在斯特拉特福的每位球员的球员号码和地址
查询:
select playerno, town || '' || street || '' || houseno
from players
where town = 'stratford';
Book的结果:
2 Stratford Stoney Road 43
6 Stratford Haseltine lane 80
......等
我的结果(使用相同的查询):
2 1
6 1
7 1
39 1
57 1
83 1
100 1
答案 0 :(得分:1)
因为,按照书中的说法,如果他们使用了sql模式PIPES_AS_CONCAT,那么你的管道将作为连接运算符。
SET sql_mode='PIPES_AS_CONCAT';
select playerno, town || '' || street || '' || houseno
from players
where town = 'stratford';
将为您提供书中所示的输出:)
答案 1 :(得分:0)
在MySQL中,您必须使用CONCAT()
将列的值放在一个字符串中:
SELECT playerno, CONCAT(town, ' ', street, ' ', houseno)
FROM players
WHERE town = 'stratford';
您的书可能是指使用||
来连接字符串的Oracle concatenation语法。默认情况下,MySQL将||
视为两个或多个条件之间的OR运算符,如果其中任何一个计算为“true”,则返回1
。
但正如satdev86的回答所述,如果手动模式||
,MySQL 允许PIPES_AS_CONCAT
仅作为连接运算符使用在执行查询之前设置。
在您的书中,它明确指出您必须设置MySQL sql_mode
才能使示例正常工作。它位于SQL示例之前的页面上: