2014-09-21 152 views
0

我有這個表寫Mysql左連接不行?

文章

articles_id

ARTICLE_NAME
article_qty
article_price
article_amount

訂單

orders_id
的article_id
INVOICE_ID
CUSTOMER_ID

客戶

customers_id
CUSTOMER_NAME
customer_position
customer_office

customer_invoice

當我做這樣的事情

$sql="SELECT customer_name, article_name FROM orders LEFT JOIN articles ON article_id = articles_id LEFT JOIN customers on customer_id = customers_id"; 

它doees沒有得到任何結果,什麼是留在一個查詢加入這個兩個表的正確方法?

我用CI 喜歡這個

$this->db->query($sql); 

什麼,我得到了我這個

object(CI_DB_mysql_result)#28 (8) { ["conn_id"]=> resource(31) of type (mysql link persistent) ["result_id"]=> resource(52) of type (mysql result) ["result_array"]=> array(0) { } ["result_object"]=> array(0) { } ["custom_result_object"]=> array(0) { } ["current_row"]=> int(0) ["num_rows"]=> int(2) ["row_data"]=> NULL } 
+0

您的查詢應該是正確的,但我會使用表別名來限定所有列名稱。 – 2014-09-21 17:44:55

+0

左連接將不會過濾掉第一個表的結果,並且您沒有'WHERE'子句。 'orders'表中有任何行嗎? – Brandon 2014-09-21 17:45:58

+0

是的,我有訂單中的行 – 2014-09-21 17:47:55

回答

1

你需要指定任何表的別名加入你使用這樣的:

$sql="SELECT c.customer_name, a.article_name FROM orders o 
LEFT JOIN articles a ON o.article_id = a.articles_id 
LEFT JOIN customers c on o.customer_id = c.customers_id"; 

或者您可以使用USING語法:

$sql="SELECT c.customer_name, a.article_name FROM orders o 
LEFT JOIN articles a ON USING(articles_id) 
LEFT JOIN customers c on USING(customer_id); 
+0

我同意這是更好的形式,但我不確定這是導致問題的原因。不正確的外部聯接標準可能會導致聯接或者爲右側的列返回NULL,或者導致更多的行比期望的行更少(例如,如果articles_id = articles_id被解釋爲同一個表,那麼它總是等於自身)。 – Brandon 2014-09-21 18:00:15