MySQL if语句条件连接[关闭]
Posted
技术标签:
【中文标题】MySQL if语句条件连接[关闭]【英文标题】:MySQL if statement conditional join [closed] 【发布时间】:2011-11-29 20:21:59 【问题描述】:我正在尝试做类似的事情
SELECT * from accounttable, peopletable, companytable
WHERE if accounttable.account_type = company
JOIN companytable
WHERE companytable.id = accounttable.company_id
ELSE IF accounttable.account_type = = person
JOIN peopletable
WHERE peopletable.id = accounttable.person_id
对不起,它有点sqlenglish,但我真的不知道如何写出来。
【问题讨论】:
告诉我你的表模式和这些表之间的关系..你有很多语法错误 如果你不知道你想让它做什么,你怎么能写一个查询?请尽量用文字描述你想要什么。它也会帮助你自己。通常,您一开始描述问题就会看到解决方案。 读取已写入的伪查询,根据account_type
的值,@Akshat 似乎想在peopletable
和companytable
上加入accounttable
。对我来说相当直截了当。
我试着把它写成一个声明,但 *** 把整个事情编成了代码
【参考方案1】:
类似的东西呢:
SELECT *
from accounttable
left join peopletable ON (accounttype = 'person' AND peopletable.id = accounttable.person_id)
left join companytable ON (accounttype = 'company' AND companytable.id = accounttable.company_id)
我将连接两个表,因此您将在输出中包含所有三个表的字段。如果accounttype != 'person'
,peopletable
的字段将为NULL
,companytable
的字段将为NULL
,其中accounttype != 'company'
。
您可以在 here 等位置找到有关 LEFT JOIN
语法的更多信息...
【讨论】:
优秀的作品完美无缺,(第三行 peopletable.id 应该是 companytable.companyid)非常聪明的方式将 acountype=xx 和 'and' 一起使用! @Akshat 修复了答案,将您的注释包含在拼写错误中;)【参考方案2】:SELECT a.*, p.*, c.* from accounttable a
LEFT JOIN peopletable p ON (a.person_id = p.id AND a.account_type = 'person')
LEFT JOIN companytable c ON (a.company_id = c.id AND a.account_type = 'company')
请注意,a、p、c 是完整表名的别名,这样可以节省输入时间。
此查询将连续提供 p.* 或 c.* 的所有 null
。
您可以像这样重写选择部分:
SELECT
a.id, a.accounttype
, COALESCE(p.name, c.name) as name
, COALESCE(p.address, c.address) as address
....
FROM .....
见:http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce
【讨论】:
@diEcho : Romain 给出了快速的答案,不是吗?【参考方案3】:它必须如下所示(据我所知)
SELECT a.*,p.*,c.*
FROM accounttable a
LEFT JOIN companytable c ON c.id = a.company_id AND a.account_type = 'company'
LEFT JOIN peopletable p ON p.id = a.person_id AND a.account_type = 'person'
【讨论】:
@Upendra 你否决了我的回答???我没有拒绝你。在您的答案下方查看我的评论 我没有拒绝你,而是诚实地告诉你的错误。以上是关于MySQL if语句条件连接[关闭]的主要内容,如果未能解决你的问题,请参考以下文章