MySQL if语句条件连接

Aks*_*hat 4 mysql select if-statement

嗨伙计们我想尝试做类似的事情

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
Run Code Online (Sandbox Code Playgroud)

对不起它有点sqlenglish但我真的不知道如何写出来!

Rom*_*ain 15

怎么样的:

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)
Run Code Online (Sandbox Code Playgroud)

我将加入两个表,因此您将在输出中包含所有三个表的字段.来自的字段peopletable将是NULLif accounttype != 'person',而那些companytable将是NULLwhere accounttype != 'company'.

您可以LEFT JOIN这里找到更多有关语法的语法...


Joh*_*ica 6

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')
Run Code Online (Sandbox Code Playgroud)

请注意,a,p,c是完整表名的别名,这样可以节省输入.

此查询将为行中的所有nullp.*或c.*提供所有内容.
您可以像这样重写选择部分:

SELECT 
  a.id, a.accounttype
  , COALESCE(p.name, c.name) as name
  , COALESCE(p.address, c.address) as address
....
FROM .....
Run Code Online (Sandbox Code Playgroud)

请参阅:http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce