2011-07-18 154 views
0

我對PHP和MySQL相當陌生,並且遇到查詢問題。MySQL查詢問題

SELECT candidate_id.master_id, candidate_contact_details.first_name, 
candidate_contact_details.last_name, 
candidate_contact_details.home_phone FROM candidate_id, 
candidate_contact_details, qualifications WHERE qualifications.active = 'yes'; 

數據庫只有2條橫跨5桌但這回12筆,PHP和直接MySQL控制檯上。我知道我做錯了什麼,但無法弄清楚。

+0

你缺少一些條件來關聯這個*原始的* 3加入 – ascanio

+0

你可以改善這個問題的標題?我們知道這是「MySQL」,因爲您將它標記爲「MySQL」,如果您沒有「問題」,那麼您就不會在這裏。選擇一個區別這個問題的標題。 –

回答

0

您需要使查詢一致。 你的查詢是所有表的笛卡爾乘積,在大多數的情況下並沒有太大的意義

這裏是更好的東西(假設master_id是參考了候選實例):

SELECT candidate_id.master_id, candidate_contact_details.first_name, 
candidate_contact_details.last_name, 
candidate_contact_details.home_phone 
FROM candidate_id, candidate_contact_details, qualifications 
WHERE qualifications.active = 'yes' AND candidate_id.master_id = candidate_contact_details.master_id AND qualifications.master_id = candidate_id.master_id; 

更妙的是使用JOIN和使用別名表名,使代碼更易讀:

SELECT c.master_id, cc.first_name,cc.last_name,cc.home_phone 
FROM candidate_id c 
    JOIN candidate_contact_details cc 
    ON c.master_id = cc.master_id 
    JOIN qualifications q 
    ON c.master_id = q.master_id 
WHERE q.active = 'yes'; 
+0

實際上,您的第一個查詢*是*加入(生).. :) – ascanio

+0

感謝大家的快速和非常有益的迴應。我現在明白了:) –

0

試試這個

SELECT candidate_id.master_id,candidate_contact_details.first_name,candidate_contact_details.last_name,candidate_contact_details.home_phone FROM candidate_id,candidate_contact_details,qualifications WHERE qualifications.active ='yes'and candidate_id.master_id = candidate_contact_details.master_id and candidate_id.master_id = qualification.master_id;

確保master_id列跨所有表存在,並且其名稱正確。

正如daniele所說,查詢需要在內部連接而不是笛卡爾產品的情況下描述。 你是否在這些表上聲明瞭外鍵?

+0

oops。看起來像丹尼爾還添加了修改後的SQL查詢! – Parth

0

您需要了解如何連接SQL表。除非查詢指定一個表中的行如何與另一個表中的行相關,否則數據庫將在每個其他表中的行中將每行連接到