在Access中,我有一个使用Inner Join with和IF语句的查询。我是否可以在MySQL中使用它,因为它似乎没有按预期工作,不确定是否缺少某些内容或MySQL是否不允许该方法?
SELECT Matrix.Model, Payment.Cost
FROM Payment
INNER JOIN Matrix ON if(Left(Matrix.Model,1)='S', Left(Matrix.Model,2), Left(Matrix.Model,1) = Matrix.PreFix)
GROUP BY Matrix.Model
我似乎得到了一些不以S开头的返回,就好像该方法无效但不会导致重大错误。
答案 0 :(得分:2)
这是您的查询(使用表别名使其更具可读性):
SELECT m.Model, p.Cost
FROM Payment p INNER JOIN
Matrix m
ON if(Left(m.Model,1) = 'S', Left(m.Model, 2), Left(m.Model, 1) = m.PreFix)
GROUP BY m.Model;
请注意,此语句有两种可能的返回值:Left(m.Model, 2)
和Left(m.Model, 1) = m.PreFix
。这是一个数字上下文,因此then
子句被解释为数字。以非数字字符开头的字符串(例如S
)将转换为0
,这是错误的。
我会在没有if()
的情况下写这个:
SELECT m.Model, p.Cost
FROM Payment p INNER JOIN
Matrix m
ON (m.model like 'S%' and m.Prefix = Left(m.Model, 2)) or
(m.model not like 'S%' and m.Prefix = Left(m.Model, 1))
GROUP BY m.Model;
此外,列p.cost
将是来自不确定行的值 - 它既不在group by
也不在聚合函数中。此构造不适用于任何其他数据库。它使用MySQL的扩展,除非你真正理解你在做什么,否则通常不鼓励使用它。