选择查询中的 if 子句

arm*_*inb 2 mysql

我想通过 equi join 从两个表中获取一些人的数据。有些人有地址数据,有些人没有。对于那些没有addresses_idfrom 表的人来说persons是 NULL。

对于所有有地址的人(查询#1):

SELECT p.last_name, p.first_name, 
       a.street, a.house_nr, a.post_code, a.city 
  FROM persons AS p, addresses AS a 
 WHERE p.id=42 AND a.id=p.addresses_id;
Run Code Online (Sandbox Code Playgroud)

对于我所做的所有没有地址数据的人(查询#2):

SELECT p.last_name, p.first_name 
  FROM persons AS p WHERE p.id=42;
Run Code Online (Sandbox Code Playgroud)

有没有什么顺畅的方法可以将这两个查询合二为一。也许有一个 if 子句?我不想自己检查该addresses_id字段然后执行 query#1 或 query#2。

我正在将 MySQL 与 InnoDB 引擎一起使用。谢谢。

小智 6

也许是这样的:

SELECT 
  p.last_name, 
  p.first_name, 
  a.street, 
  a.house_nr, 
  a.post_code, 
  a.city 
FROM persons AS p
LEFT JOIN addresses AS a 
WHERE p.id=42 
Run Code Online (Sandbox Code Playgroud)