如何在条件中多次使用同一列

时间:2019-05-20 00:50:31

标签: mysql sql

如何在where条件下多次使用相同的列。我想多次使用“ meta_key”和“ meta_value”。但不幸的是,它不起作用。

我使用了左连接语句,但是没有用。

SELECT * FROM `products` d 
JOIN (select distinct product_id from products 
    WHERE (meta_key="product_image" AND meta_value!="") 
AND
(meta_key="product_type" AND meta_value="Soap" ) 
And
user_id='6' LIMIT 10) t on d.product_id = t.product_id

空结果。

2 个答案:

答案 0 :(得分:2)

如果要获得同时具有两个密钥的产品,

SELECT p.*
FROM products p join
     (SELECT product_id 
      FROM cs_inventory 
      WHERE ((meta_key = 'product_image' AND meta_value <> '') OR
             (meta_key = 'product_type' AND meta_value= 'Soap' )
            ) AND
            user_id = 6
      GROUP BY product_id
      HAVING COUNT(*) = 2
      LIMIT 10
     ) i
     ON p.product_id = i.product_id;

一行不能在一个列上有多个值,因此您的子查询将永远不会返回任何值。

相反,它使用OR并检查该产品的两行均可用。

答案 1 :(得分:1)

我不确定您要完成什么,但是到目前为止,您可以使用要求

WHERE (meta_key = "product_image" AND meta_value != "") AND
      (meta_key = "product_type" AND meta_value = "SOAP") AND

这里的这些是相互矛盾的论点。 meta_key不能同时是product_imageproduct_type。我认为您正在寻找的是OR

WHERE (meta_key = "product_image" AND meta_value != "") OR
      (meta_key = "product_type" AND meta_value = "SOAP")

此外,我不确定这对SQL本身是否很新,但是WHERE通常在JOIN ON子句之后。例如,

 JOIN (select distinct product_id from cs_inventory) ON
      d.product_id = t.product_id
 WHERE ((meta_key = "product_image" AND meta_value != "") OR
       (meta_key = "product_type" AND meta_value = "SOAP")) AND 
       (user_id = '6')
 LIMIT 2;