MYSQL Левое объединение с A.table и b.table с сохранением идентификатора a.table - PullRequest
0 голосов
/ 05 марта 2012

MYSQL Левое объединение A.table и b.table при сохранении идентификатора a.table при отсутствии совпадения b.table.

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] => 
)

Когда нет совпадений в таблице.

Мне нужно это:

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

Есть предложения?

Решение ниже сработало. Спасибо за вашу помощь.

SELECT *, COALESCE (a.customer_id, 0) AS customer_id FROM sales_customer a LEFT OUTER JOIN sales_contact b ВКЛ.

Ответы [ 3 ]

1 голос
/ 05 марта 2012

Вместо записи SELECT * («выбрать все поля»), вы должны указать поля, которые вы на самом деле хотите: SELECT 54 AS `0`, a.customer_id, ... FROM .... Это лучше практиковать в целом, а не только для этого.

Если вы действительно хотите написать SELECT * для выбора всех полей, вы все равно можете добавить дополнительные поля в конец, которые в PHP будут перезаписывать более ранние поля с одинаковыми именами: SELECT *, a.customer_id FROM ....

1 голос
/ 05 марта 2012

Используйте это так:

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
1 голос
/ 05 марта 2012

Попробуйте использовать COALESCE ().Он вернет первое ненулевое значение.

...