2010-03-02 141 views
1

我有一些表。MySql'選擇'幫助

這些表都有一個共同稱爲「classified_id」一米欄:

main_table:   cars_table:    
    id (PK) => 4222  id (PK) => 1021    
    classified_id => 25 classified_id => 25 

現在,我想無論何時進行搜索,比較,如果任何的main_table.classified_id匹配任何的cars_table.classified_id(在這種情況下)。

cars_table可能返回沒有匹配! 每張表中的classified_id是唯一的關係。 我永遠不需要將cars_table.classified_id與main_table.classified_id進行比較,但反過來就是我需要的(main_table.classified_id = cars_table.classified_id)。

我不知道使用什麼類型的Join ...有什麼幫助嗎?左加入?

感謝

+0

請更清楚地說明你正在嘗試做什麼。你想只從main_table獲取也在cars_table中的行嗎?或者你想從main_table獲取所有行並獲取一些其他信息,該行也在cars_table中? – 2010-03-02 09:38:06

+0

不,只有在兩個表中匹配的行在classified_id – pesar 2010-03-02 09:39:54

回答

0

是的,它是一個左連接

喜歡的東西

SELECT * 
FROM main_table mt LEFT JOIN 
     cars_table ct ON mt.classified_id = ct.classified_id 
+0

好吧,一個簡短的後續行動Q,如果我在代碼中將'變量'的位置切換到'相等'標記的位置,會發生什麼情況,所以它會變成'ON ct.classified_id = mt.classified_id'?這很重要嗎? – pesar 2010-03-02 09:36:16

+0

不,這沒關係,它是左連接和重要的表格。 – 2010-03-02 09:38:29

+0

pesar,它不會因爲平等是一個對稱的關係:http://en.wikipedia.org/wiki/Symmetric_relation – allyourcode 2010-03-02 09:42:28

0
SELECT * FROM main_table LEFT JOIN cars_table ON main_table.classified_id = cars_table.classified_id 

將返回1 ??取決於cars_table中匹配的數量,main_table行的副本。如果沒有匹配,所有來自cars_table的值將是NULL

0

我不太清楚你在問什麼,但假設你正在尋找main_table中符合條件的所有記錄,並且你想沿着在cars_table具有相同classified_id任何在主表中的匹配記錄,即使有在cars_table沒有這樣的記錄,你應該使用左側的任何記錄帶來的加入,像這樣:

 
SELECT * 
FROM main_table AS M 
    LEFT JOIN cars_table as C 
    ON C.classified_id = M.classified_id 
WHERE 
    f(M.foo) 

當有一條M記錄使f(M.foo)求值爲TRUE,但沒有相應的C記錄時,M記錄仍將出現在結果集中,但所有C字段都將爲NULL。左外

一個更透徹的解釋連接(同樣的事情,左連接)可以在這裏找到:

http://en.wikipedia.org/wiki/Left_outer_join#Sample_tables

你需要看一下樣本數據來讓這個例子的意義他們給左外連接:

http://en.wikipedia.org/wiki/Left_outer_join#Sample_tables