gpt4 book ai didi

mysql - 在 SQL 查询的 WHERE 子句中的 CASE 语句之间使用 AND

转载 作者:行者123 更新时间:2023-11-30 00:09:37 25 4
gpt4 key购买 nike

我编写了一个查询,如下 -

SELECT user_id, display_name, user_email, meta_key, meta_value 
FROM wp_usermeta um INNER JOIN wp_users u ON um.user_id = u.id
WHERE
CASE
WHEN meta_key = "renewal_date" THEN meta_value = "a"
WHEN meta_key = "wp_user_level" THEN meta_value <> "10"
END

我需要两个 'when' 语句的 user_id 相等。我的意思是,如果同一个用户(具有相同的user_id)的meta_key为renew_date,相应的meta_value为a,并且同一用户的meta_key为wp_user_level,相应的meta_value为10,那么他不应该显示在结果列表中。由于我对 SQL 的了解有限,我正在考虑在 WHEN 语句之间使用 AND,但它给了我一个语法错误。

最佳答案

根据您的描述,我想我明白您想要做什么,但您的查询不会那样工作。看起来 wp_usermeta 表中每个用户 ID 都有几行。这称为 EAV 模型(实体-属性-值),该模型使报告变得非常困难,因为您的行应该是列。

让它工作的一种方法是多次加入 wp_usermeta 表(因此行本质上变成列),如下所示:

SELECT u.id, u.display_name, u.user_email, 
rd.meta_value AS renewal_date, ul.meta_value AS wp_user_level
FROM wp_users u
LEFT JOIN wp_usermeta rd ON rd.user_id=u.id AND rd.meta_key='renewal_date'
LEFT JOIN wp_usermeta ul ON ul.user_id=u.id AND ul.meta_key='wp_user_level'
WHERE rd.meta_value = 'a'
AND ul.meta_value <> '10'

请注意,没有“wp_user_level”数据的用户将包含在此报告中。如果您需要过滤掉这些,您可以将 LEFT JOIN 替换为 INNER JOIN。

关于mysql - 在 SQL 查询的 WHERE 子句中的 CASE 语句之间使用 AND,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24191935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com