作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有三个 MySQL InnoDB 表:债务人公司个人
现在我想查找有关债务人的信息。以下 SQL 不工作,任何人都可以帮助我编写工作 SQL 吗?
SELECT
d.id,
d.type,
i.name
FROM
debtors AS d
IF d.type = 'c' THEN
INNER JOIN
companies AS i ON (i.debtor_id = d.id)
ELSE THEN
INNER JOIN
private_individuals AS i ON (i.debtor_id = d.id)
WHERE
d.id = 1
错误:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF d.type = 'c' THEN INNER JOIN companies AS i ON (i.debtor_id = d.i' at line 7
提前致谢!
最佳答案
你不能那样使用 IF
!
这是一个可能的解决方案:
SELECT
d.id,
d.type,
COALESCE(i.name, i2.name) as name
FROM
debtors AS d
LEFT JOIN companies AS i ON i.debtor_id = d.id and d.type = 'c'
LEFT JOIN private_individuals AS i2 ON i2.debtor_id = d.id and d.type <> 'c'
WHERE
d.id = 1
另一个可能是动态 SQL,但您应该避免使用它! :)
关于SELECT 中的 MySQL IF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10482366/
我是一名优秀的程序员,十分优秀!