簡體   English   中英

在WHERE子句SQL查詢中的CASE語句之間使用AND

[英]Using AND between CASE statements in the WHERE clause SQL query

我寫了一個查詢,如下所示-

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作為renewal_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”數據的用戶將包括在此報告中。 如果您需要過濾掉那些過濾器,則可以用INNER JOIN替換LEFT JOIN。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM