2010-12-11 81 views
0

我有我的數據庫的表名爲訂單,它看起來像這樣:MySQL - 如何加入未知索引?

ID_section(INT),ID_price(INT),ID_city(INT),ID_company(INT)

而且我想使用JOIN方法將名稱設置爲ID。

我會做的是:

SELECT * FROM ORDERS 
JOIN sections ON sections.id=orders.ID_section 
JOIN prices ON prices.id=orders.ID_price 
JOIN cities on cities.id=orders.ID_cities 
JOIN companies ON companies.id=orders.ID_company 

但問題是,在訂單表中可以插入值0,這意味着 - 所有章節/價格/城市/公司,但是當我運行我的查詢,只有值,他們的ID存在於另一個表中。

任何想法?謝謝。

回答

0

使用LEFT JOIN代替JOIN(這是INNER JOIN的簡寫)

+0

這是不正確的。一個左連接返回沒有任何其他關聯的訂單。當有0 ID時,他希望**所有**都相關聯。 – 2010-12-11 19:40:37

+0

你就是這麼理解它的。我堅持我的回答。 – Mchl 2010-12-11 19:45:59

+0

「值爲0,這意味着 - **所有**部分/價格/城市/公司」我明白這一點,他希望在ID_ 爲0時匹配該類別中的所有內容。 – 2010-12-11 19:49:36

1

如果我理解你正確地提出問題和有,例如,ID_section = 0意味着,爲了屬於所有的部分,則下面的查詢應該做的招。

SELECT * FROM ORDERS 
JOIN sections ON sections.id=orders.ID_section OR orders.ID_section = 0 
JOIN prices ON prices.id=orders.ID_price OR orders.ID_price = 0 
JOIN cities on cities.id=orders.ID_cities OR orders.ID_cities = 0 
JOIN companies ON companies.id=orders.ID_company OR orders.ID_company = 0 

如果,另一方面,要檢索所有訂單,不管它們有專門的章節,價格等有關,那麼就足以使LEFT JOIN,你必須JOIN。 (但這種情況並不是由你的問題引起的!我只是添加了它,因爲人們似乎明白這一點)。

+0

這是不正確的。如問題所述,這些表中沒有ID = 0的行。 :P – Mchl 2010-12-11 19:47:44

+0

@Mchl那麼?你在哪裏看到我檢查'id = 0'?我只檢查'ID_ '爲0. – 2010-12-11 19:51:13

+0

是的。我寫了ID而不是寫全名來節省一些時間。 – Mchl 2010-12-11 19:52:35

0

LEFTRIGHT OUTER JOINs進行實驗,你就可以找出你需要做的事情。基本上,LEFT或RIGHT OUTER JOIN會將NULLS插入沒有數據存在但仍然進行連接的列。

在網上有various resources解釋這一點。