MYSQL左联接A.table和b.table,同时保留A.table id


MYSQL Left join A.table and b.table while retaining a.table id

MYSQL左联接A.table和b.table,同时在没有b.table匹配时保留A.table id。

SELECT * FROM sales_customer a LEFT JOIN sales_contact b
ON a.customer_id = b.customer_id
ORDER BY CASE WHEN company_name = '' THEN lname ELSE company_name END ASC

给我这个:

Array (
  [0] => 54
  [customer_id] => 
)

当没有b.table匹配时。

我需要这个:

Array (
  [0] => 54
  [customer_id] => 29 
)

有什么建议吗?

下面的解决方案奏效了。谢谢你的帮助。

选择*,合作伙伴(a.customer_id,0)作为sales_customer的customer_id a LEFT OUTER在a.customer_id=b.customer_id上加入sales_contact b当company_name=''时按案例订购,然后以其他公司名称结束ASC

这样使用它:

SELECT 
    *,
    COALESCE(b.customer_id, 0) AS customer_id
FROM sales_customer a 
LEFT JOIN sales_contact b ON a.customer_id = b.customer_id
ORDER BY 
    CASE WHEN company_name = '' THEN lname ELSE company_name END ASC

尝试使用COALESCE()。它将返回第一个非NULL值。

与其编写SELECT *("选择所有字段"),不如指定实际需要的字段:SELECT 54 AS `0`, a.customer_id, ... FROM ...。总的来说,这是更好的做法,而不仅仅是为了这个。

如果真的想写SELECT *来选择所有字段,你仍然可以在末尾添加额外的字段,在PHP中,这些字段会覆盖以前的命名字段:SELECT *, a.customer_id FROM ...