簡體   English   中英

SQL查詢沒有給出確切的答案

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM