[英]Select by multiple values in left join
使用以下結構,如何在這種1:n關系中選擇多個條件的request
子集?
# Table 1: Request
uid
name
# Table 2: Additional Information
uid
type
value
request
表2的注釋: type
可以是任何值,即“ product_name”或“ rating”。
如果我只想選擇給定product_name
請求,則可以執行以下操作:
SELECT * FROM request as r
LEFT JOIN additional_information as i
ON r.uid = i.request
WHERE i.type = 'product' AND i.value = 'Product Name'
如果我想按給定的product_name
AND rating
選擇Requests,那么我的語句必須是什么樣子。 我試圖簡單地添加另一個聯接,但這給了我所有與給定product_name
相關的請求以及與給定評級相關的所有請求。 我需要聲明尊重兩個條件。
如上所述,這對我不起作用。
SELECT * FROM request as r
LEFT JOIN additional_information as i
ON r.uid = i.request
LEFT JOIN additional_information as a
ON r.uid = a.request
WHERE i.type = 'product' AND i.value = 'Product Name'
OR a.type = 'rating' AND a.value = 1
感謝幫助!
將這些條件從WHERE
移至JOIN ON
條件,例如
SELECT * FROM request as r
LEFT JOIN additional_information as i
ON r.uid = i.request
AND i.type = 'product' AND i.value = 'Product Name'
LEFT JOIN additional_information as a
ON r.uid = a.request
AND a.type = 'rating' AND a.value = 1;
而且絕對是的,考慮到Strwabery的有價值的評論(錯過了),而不是執行select *
或select r.*
,實際上您可能想要指定要獲取的列名,這比*
性能上要好,因為您不是使用投影獲取不必要的數據; 除非您真的想獲取所有內容。
與其他產品相比,它可能會變慢,因為它已加入您的附加數據TWICE中,一次用於產品,再次進行評級。 可能應該將其更改為單個左連接,否則您可能會得到笛卡爾結果,從而使答案answer腫。
SELECT *
FROM
request as r
LEFT JOIN additional_information as i
ON r.uid = i.request
AND ( ( i.type = 'product' AND i.value = 'Product Name' )
OR ( i.type = 'rating' AND i.value = 1 );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.