SQL多个WHERE IN

时间:2014-12-10 13:53:00

标签: mysql sql database wordpress phpmyadmin

我正在尝试从wp_posts表中选择ID,我需要做3个条件。

  1. ID 是否与 wp_postmeta 表中的 post_id 相匹配,其中 meta_key =& #39; gtp_analytics_client_id'并且 meta_value 不为空。

  2. ID 是否与 wp_postmeta 表中的 post_id 相匹配,其中 meta_key =& #39; gtp_conversion_uploaded'并且 meta_value 不等于1.

  3. ID 是否与 wp_postmeta 表中的 post_id 相匹配,其中 meta_key =' gtp_lead_revenue'并且 meta_value 不为空。
  4. 我是SQL的初学者。这就是我现在所拥有的,但我不能使用多个IN。所以我想我需要另辟蹊径。

    SELECT ID 
    FROM wp_posts 
    WHERE ID IN (SELECT post_id 
                 FROM wp_postmeta 
                 WHERE meta_key = 'gtp_analytics_client_id' AND meta_value != '') 
    AND IN (SELECT post_id 
            FROM wp_postmeta 
            WHERE meta_key = 'gtp_conversion_uploaded' AND meta_value != 1)
    AND IN (SELECT post_id 
            FROM wp_postmeta 
            WHERE meta_key = 'gtp_revenue' AND meta_value != '')
    

    我收到以下错误:

      

    您的SQL语法出错;查看与MySQL服务器版本对应的手册,以便在&#39; IN附近使用正确的语法(SELECT post_id FROM wp_postmeta WHERE meta_key =&#39; gtp_conversion_uploaded&#39; A&#39; at line 4 < / p>

3 个答案:

答案 0 :(得分:4)

and不属于in运算符,它是三个独立的in运算符,因此您需要所有运算符的第一个操作数(ID):

SELECT ID 
FROM wp_posts 
WHERE ID IN ( ... ) 
AND ID IN ( ... )
AND ID IN ( ... )

你也可以把它写成三个连接:

SELECT
  p.ID
FROM
  wp_posts p
  INNER JOIN wp_postmeta m1 ON m1.post_id = p.ID AND m1.meta_key = 'gtp_analytics_client_id' AND m1.meta_value != ''
  INNER JOIN wp_postmeta m2 ON m2.post_id = p.ID AND m2.meta_key = 'gtp_conversion_uploaded' AND m2.meta_value != 1
  INNER JOIN wp_postmeta m3 ON m3.post_id = p.ID AND m3.meta_key = 'gtp_revenue' AND m3.meta_value != ''

答案 1 :(得分:3)

当它可以是3个案例中的任何一个

SELECT ID 
FROM wp_posts 
WHERE ID IN (SELECT post_id 
             FROM wp_postmeta 
             WHERE (meta_key = 'gtp_analytics_client_id' AND meta_value != '')
             OR (meta_key = 'gtp_conversion_uploaded' AND meta_value != 1)
             OR (meta_key = 'gtp_revenue' AND meta_value != '')
            ) 

答案 2 :(得分:2)

SELECT p.ID 
FROM wp_posts p
JOIN wp_postmeta m on p.id = m.post_id
group by p.id
having sum(m.meta_key = 'gtp_analytics_client_id' AND m.meta_value != '') > 0
and sum(m.meta_key = 'gtp_conversion_uploaded' AND m.meta_value != 1) > 0
and sum(m.meta_key = 'gtp_revenue' AND m.meta_value != '') > 0