我正在尝试从wp_posts表中选择ID,我需要做3个条件。
ID 是否与 wp_postmeta 表中的 post_id 相匹配,其中 meta_key =& #39; gtp_analytics_client_id'并且 meta_value 不为空。
ID 是否与 wp_postmeta 表中的 post_id 相匹配,其中 meta_key =& #39; gtp_conversion_uploaded'并且 meta_value 不等于1.
我是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>
答案 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