我想在表中创建一个额外的列。其目的是为所有邮政编码介于2900和3199之间或2600和2699之间的行赋予值“omgeving rotterdam”、所有其他邮政编码“nederland”以及所有空单元格为“no postcode”的行。
我尝试了以下代码(但它给出了“omgeving rotterdam in all cells of the added row')
SELECT *
,case
when (LEFT(Postcode,4) between 2900 AND 3199 OR 2600 AND 2699) then 'Omgeving Rotterdam'
when (LEFT(Postcode,4) IS NOT NULL AND NOT between 2900 AND 3199 OR 2600 AND 2699) then 'Nederland'
else 'Geen Postcode'
end
as 'Komt Uit'
FROM
a
LEFT JOIN
b ON a.ID = b.code
JOIN
c ON c.id_E = a.E_ID
3条答案
按热度按时间iyfamqjs1#
这不是答案。只是为了解释:
是
2600不是真正的条件,2699也不是。但是mysql需要一些条件将整数转换为布尔值(使0=false,其他数字=true)。所以你有:
只是
这就是为什么你所有的结果都是“omgeving rotterdam”。
关于:
我认为这会引起一个错误。我不知道mysql的解析器是什么
AND <nothing> NOT between 2900 AND 3199
.cgfeq70w2#
大概吧
postcode
是字符串而不是数字。你不应该把你的类型混为一谈。它可能是低效的,有时会导致低效的结果。在您的情况下,您正在使用
LEFT()
,但对于相同长度的字符串,实际上不需要这样做。因此,这可能会满足您的需求:笔记:
如果
postcode
它的长度是可变的,那么你可能想要left()
,但您可能希望检查数据。如果
postcode
是一个数字,使用数字运算或包含对字符串的显式转换。仅对字符串和日期常量使用单引号。不要使用它们来定义列别名。这最终会导致错误和混乱。
混合时
left join
以及inner join
,我总是把inner join
第一。bmp9r5qi3#
因此,我认为您需要详细说明每个和/或步骤,从而得出以下结果: