2017-02-04 63 views
0

當語句結尾處的WHERE子句未包括時,子查詢限制結果完美。我知道子查詢LIMIT首先發生,然後在該結果集上觸發WHERE子句,並且這是對子查詢的限制/限制。子查詢LIMIT在執行子查詢之外的WHERE時導致問題

我需要的是比我更有經驗的人幫助兄弟用LIMIT檢索記錄,並且能夠通過WHERE子句限制結果集。讓我知道這是不是很好解釋。

我也搜遍了互聯網尋找答案几個小時,沒有運氣。你的時間值得讚賞。

編輯:添加上SQLfiddle原油例如:http://sqlfiddle.com/#!9/2de563/4

SELECT * 
    FROM (SELECT * FROM parent_products LIMIT 10) pp 
    INNER JOIN products_variants pv ON pv.parent_id=pp.parent_id 
    INNER JOIN products p ON p.id=pv.product_id 
    INNER JOIN product_types pt ON pt.product_type_id=p.product_type 
    LEFT JOIN team_list t ON pp.team_id=t.team_id 
    LEFT JOIN photos ph ON ph.product_id=p.id 
    LEFT JOIN product_attributes pa ON pa.product_id=pv.product_id 
    LEFT JOIN attributes a ON a.id=pa.attribute_id 
    LEFT JOIN product_attribute_options po ON po.product_attribute_option_id=a.parent_id 
    WHERE t.team_id=100 AND p.active='y'; 

解釋選擇: enter image description here

+0

如果可能分享您的樣本數據的腳本,將很容易調試查詢 –

+0

@ChintanUdeshi我希望我可以...這是一個工作數據庫......再加上數據結構是頂起來的。基本上這是與父母/子女的1-n關係。我需要限制父母,但不包括孩子數量的限制(上面的查詢)。但是一旦添加WHERE子句,由於LIMIT選擇前10個結果並針對這10個結果運行WHERE,因此結果爲空。因此沒有結果。希望這個解釋能幫助更多。 – Binary101010

+0

yes從(SELECT * FROM parent_products LIMIT 10)中選擇的前10個結果在相應產品中沒有Active ='y',因此當您應用條件時沒有數據到達 –

回答

0
Below query will give you the expected output 

SELECT * FROM (SELECT users.id,users.name FROM users 
LEFT JOIN map ON users.id=map.user_id 
LEFT JOIN locations ON locations.location_id=map.location_id 
INNER JOIN type ON locations.type=type.id 
WHERE type.id=1 limit 3) users 
LEFT JOIN map ON users.id=map.user_id 
LEFT JOIN locations ON locations.location_id=map.location_id 
INNER JOIN type ON locations.type=type.id 
where type.id=1; 
+0

沒有ORDER BY的限制是相當無意義的 – Strawberry

+0

輸出需要前3個用戶無論如何 –

+0

這選擇3行。但不一定是前3行 – Strawberry