繁体   English   中英

MySQL 在 where 子句中多次查询同一字段

[英]MySQL query for same field multiple time in where clause

我想多次使用同一个字段。 我累了一个查询,但没有得到正确的结果。

这是我的数据库结构:

wp_postmeta:

在此处输入图片说明

wp_posts: 在此处输入图片说明

这是我的查询:

SELECT wp.ID FROM wp_postmeta wpm 
LEFT JOIN 
wp_posts wp ON (wp.ID = wpm.post_id) 
WHERE  
wp.post_parent=7886 AND 
wpm.meta_key = 'attribute_pa_size' AND 
wpm.meta_value="l" AND 
wpm.meta_key = 'attribute_pa_with-bro-kalam-blouse' AND 
wpm.meta_value="no"

在这里我想得到结果ID 7951

您需要在此处进行某种聚合以隔离元表中的键和值。 这样的事情应该工作:

SELECT wp.ID
FROM wp_postmeta wpm 
LEFT JOIN wp_posts wp
    ON wp.ID = wpm.post_id
WHERE  
    wp.post_parent = 7886
GROUP BY
    wp.ID
HAVING
    MAX(CASE WHEN wpm.meta_key = 'attribute_pa_size'
             THEN wpm.meta_value END) = 'l' AND
    MAX(CASE WHEN wpm.meta_key = 'attribute_pa_with-bro-kalam-blouse'
             THEN wpm.meta_value END) = 'no';

要了解上述枢轴技巧如何工作,请考虑以下(单个)键和值表:

ID | meta_key                           | meta_value
1  | attribute_pa_size                  | l
1  | attribute_pa_with-bro-kalam-blouse | no
2  | attribute_pa_size                  | l
2  | attribute_pa_with-bro-kalam-blouse | yes

通过聚合ID ,我们可以梳理出我们想要的任何键的值。 例如,要检查attribute_pa_with-bro-kalam-blouse键的值,我们可以使用:

MAX(CASE WHEN meta_key = 'attribute_pa_with-bro-kalam-blouse'
         THEN meta_value END)

这是有效的,因为MAX评估的值是NULL ,当一行没有正确的键时,或者当键匹配时是meta_value 请注意MAX (和大多数聚合函数)忽略NULL值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM