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 ...
。