[英]3 table mySQL join with 2 WHERE clauses from the same column - only one working
[英]MYSQL select and join multiple where AND clauses from the same table
有一個產品表和一個產品標簽表。
嘗試選擇所有包含所有標簽的產品。 因此,當用戶優化搜索時,他們只會獲得包含所有標簽的產品。
標簽
id PID tag
------------------------------
0c212c04_Gold 0c212c04 Gold
0c212c04_500g 0c212c04 500g
0c212c04_Coin 0c212c04 Coin
最初我嘗試了OR
和IN
,但這帶回了所有結果。 即使他們只有1個必需的標簽
SELECT DISTINCT p.*
FROM products p
INNER JOIN product_tags pt ON (p.PID = pt.PID)
WHERE pt.tag = 'Gold' OR pt.tag = '10oz' AND p.RRP BETWEEN 0 AND 1000000
SELECT DISTINCT p.*
FROM products p
INNER JOIN product_tags pt ON (p.PID = pt.PID)
WHERE pt.tag IN ('Gold','10oz') AND p.RRP BETWEEN 0 AND 1000000
所以我嘗試了AND
它帶來了0結果。
SELECT DISTINCT p.*
FROM products p
INNER JOIN product_tags pt ON (p.PID = pt.PID)
WHERE pt.tag = 'Gold' AND pt.tag = '10oz' AND p.RRP BETWEEN 0 AND 1000000
如何帶回所有具有Gold
和10oz
以及Coin
多個標簽的產品?
您可以使用HAVING
子句:
SELECT p.*
FROM products p JOIN
product_tags pt
ON p.PID = pt.PID
WHERE pt.tag IN ('Gold', '10oz') AND
p.RRP BETWEEN 0 AND 1000000
GROUP BY p.PID -- okay assuming PID is unique/primary key
HAVING COUNT(*) = 2;
這是一個依賴於條件聚合並且可以處理任意數量條件的選項(只需向HAVING
子句添加更多條件):
SELECT p.id
FROM products p
INNER JOIN product_tags pt ON p.PID = pt.PID
WHERE p.rrp BETWEEN 0 AND 1000000
GROUP BY p.id
HAVING MAX(pt.tag = 'GOLD') = 1 AND MAX(pt.tag = '10oz') = 1
注意:如果您需要更多products
列,則需要在SELECT
和 GROUP BY
子句中添加它們(這不會影響查詢結果,因為主鍵product.id
已經是非聚合的一部分列)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.