2012-04-20 42 views
0

我一直在研究一個項目,直到現在只需要從連接表中找到1行。但現在我需要抓住多行..SQL建議 - 從表中選擇多行作爲innerJoin

所以它站在我的SQL的工作是這樣的:

選擇行對每個公司這個特殊的項目,該項目僅此一項就發現公司的詳細信息(姓名,身份證,聯繫電話。 blah)。 後來我加入一個載有每個公司的表單數據表(多種形式 - 這樣的多條記錄)

到現在爲止我已經指定一個formid尋找的加盟,但現在我需要指定多者。

如果我使用WHERE form_id = 1 OR form_id = 2 OR form_id = 3 ...我得到的只是每家公司找到的第一個形式比賽的結果..

如果我混淆了查詢,以便它看起來的形式第一次和每家公司與返回多個記錄不同的表單數據 - 在這個意義上工作..

但是,我然後在視圖中循環這個數組並創建一個表記錄每個記錄(以前每行都是一個新公司),但使用後者會導致多個記錄展示給同一家公司。

我能做到這一點嗎?我用後一種方法嘗試了group by,但這隻會導致只有1條記錄。

SELECT DISTINCT p.project_company_has_user_id, p.project_company_has_user_project_id, p.project_company_has_user_user_id, c.company_id, c.company_hall_no, c.company_company_name, c.company_type, c.company_country, c.company_stand_number, c.company_image_file_1, p2.project_id, p2.project_name, u.user_id, u.user_username, o.orders_id, o2.order_detail_id, o2.order_detail_product_id, f2.form_question_has_answer_id, f2.form_question_has_answer_request, f2.form_question_has_answer_form_id, f2.form_question_has_answer_user_id 
    FROM project_company_has_user p 
    INNER JOIN company c ON p.project_company_has_user_company_id = c.company_id 
    INNER JOIN project p2 ON p.project_company_has_user_project_id = p2.project_id 
    INNER JOIN user u ON p.project_company_has_user_user_id = u.user_id 
    INNER JOIN form f ON p.project_company_has_user_project_id = f.form_project_id 
    LEFT JOIN orders o ON p.project_company_has_user_user_id = o.orders_user_id 
    LEFT JOIN order_detail o2 ON ((o2.order_detail_orders_id = o.orders_id AND (o2.order_detail_product_id = 65 OR o2.order_detail_product_id = 68 OR o2.order_detail_product_id = 64))) 
    LEFT JOIN form_question_has_answer f2 ON ((f2.form_question_has_answer_form_id = 297 AND f2.form_question_has_answer_user_id = p.project_company_has_user_user_id)) 
    WHERE (f.form_template_name = "custom" AND p.project_company_has_user_garbage_collection = 0 AND p.project_company_has_user_project_id = 48) AND (LCASE(c.company_country) LIKE "%uk%" OR LCASE(c.company_country) LIKE "%uk%") ORDER BY company_company_name asc 
+0

您可以發佈您當前的SQL查詢嗎? – weenoid 2012-04-20 09:09:45

回答

1

你需要order_detail爲O2另一個領域。這個字段是row_index(位置)等定位記錄

LEFT JOIN order_detail o2 ON (o2.row_index=1 AND (o2.order_detail_orders_id = o.orders_id AND (o2.order_detail_product_id = 65 OR o2.order_detail_product_id = 68 OR o2.order_detail_product_id = 64))) 
0

就我個人而言,我會使用一個外部聯接的表格列出所有匹配的元素。如果他們需要清理數據,則可以將邏輯構建到「連接條件」中(如步驟2)。根據您正在處理的數據量以及是否需要稍後在同一個進程中重用它,您可能需要將該主數據集發佈到臨時表中,並將其用作以後邏輯的源(主)。

希望有所幫助。如果您需要代碼,請告訴我,但它非常簡單。

問候

的Mac