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

vh0rcniy  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(492)

我想多次使用同一个字段。我厌倦了一个问题,但没有得到正确的结果。
这是我的数据库结构:
可湿性粉剂后预计到达时间:

wp\u职位:

这是我的问题:

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 .

rhfm7lfc

rhfm7lfc1#

您需要在这里进行某种聚合,以隔离元表中的键和值。这样的方法应该有用:

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';

要查看上述pivot技巧的工作原理,请考虑以下(单个)键和值表:

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 价值观。

相关问题