[英]sql query not giving exact answer
SQL查詢工作,但最后兩個和條件沒有給出確切的答案
查詢:
SELECT products.*,wishlist.user_id,wishlist.p_id
FROM products
LEFT JOIN wishlist
ON products.pro_id=wishlist.p_id AND products.categ_id=2 AND wishlist.user_id=5
使用left join
,第一個表上的條件將進入where
子句。 在第二條件走在on
:
SELECT p.*, wl.user_id, wl.p_id
FROM products p LEFT JOIN
wishlist wl
ON p.pro_id = wl.p_id AND wl.user_id = 5
WHERE p.categ_id = 2;
這看起來像是SQL的“神秘”功能。 但這實際上很有意義。 LEFT JOIN
將所有行保留在第一個表中,即使ON
子句的求值不為true。 這包括第一張桌子上的條件。 換句話說, ON
子句忽略第一個表上的條件。
您的問題並未指明您遇到的問題,因此我將介紹如何解決此問題。
首先,這是一個左聯接,因此大概您希望products表中的所有內容都與左聯接表中的一些東西結合在一起。 聯接條件與where子句之間的外部聯接存在巨大差異。
讓我們看一下一些排列的含義。 通常,您首先要看一看。 我的建議是從開始更改為內部聯接開始 ,然后看看您得到了什么。 通常,從對內部聯接進行故障排除開始然后再轉到外部聯接會更簡單。
因此開始:
SELECT products.*,wishlist.user_id,wishlist.p_id
FROM products
JOIN wishlist
ON products.pro_id=wishlist.p_id AND products.categ_id=2 AND wishlist.user_id=5
確保結果是您首先期望的結果。 然后弄清楚你想要什么。 如果您想要所有產品,並將“願望清單”數據附加到類別2和用戶ID,然后返回到原始查詢。 如果您希望類別2中的產品具有user_id的願望清單數據,請執行以下操作:
SELECT products.*,wishlist.user_id,wishlist.p_id
FROM products
LEFT JOIN wishlist
ON products.pro_id=wishlist.p_id AND wishlist.user_id=5
where products.categ_id=2
還有其他幾種可能的排列方式,但是除非您清楚從數據庫中尋找什么答案,否則這是我能提供的最佳建議。
您正在將條件添加到join語句中; 因為是左連接,這意味着無論匹配與否,您都將從產品表中獲得結果。
如果只想獲得與願望清單中的產品匹配的結果,則必須將其更改為where語句,或使用內部聯接而不是左聯接
如果可行,請嘗試以下方法:
SELECT p.*, w.user_id, w.p_id FROM products p LEFT JOIN wishlist w ON p.pro_id = w.p_id WHERE p.categ_id = 2 AND w.user_id = 5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.