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 似乎想在peopletablecompanytable 上加入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 的字段将为NULLcompanytable 的字段将为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语句条件连接[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

mysql 多个条件的删除一条记录的语句

mysql语句where条件中的是啥意思

for循环和if条件中的continue语句[关闭]

mysql select语句中的if条件

python基础--if条件语句

可以将多个字段与一个条件 if 语句连接起来