我对以下查询有点疑问。
SELECT su.display_name, su.user_email, sm.meta_value FROM system_users AS su
JOIN system_usermeta AS sm ON su.ID = sm.user_id
WHERE sm.meta_key = 'market';
上述查询可以很好地显示在meta_key列中设置了“市场”的所有用户及其值。
但我怎么能转过来呢? 如何向所有没有与其user_ID关联的meta_key“market”的用户显示。
答案 0 :(得分:1)
试试这个:
SELECT su.display_name, su.user_email, sm.meta_value FROM system_users AS su
JOIN system_usermeta AS sm ON su.ID = sm.user_id
WHERE sm.meta_key <> 'market';
答案 1 :(得分:1)
我认为你需要一个更复杂的查询。 。 。因为你正在检查多行。聚合是一种方法:
SELECT su.display_name, su.user_email
FROM system_users su JOIN
system_usermeta sm
ON su.ID = sm.user_id
GROUP BY su.display_name, su.user_email
HAVING SUM( sm.meta_key = 'market' ) = 0;
答案 2 :(得分:1)
我建议你使用LEFT JOIN
,因为你想在左表中添加一个过滤器并显示右表中的数据,所以试试这个:
SELECT su.display_name, su.user_email, sm.meta_value
FROM system_users AS su
LEFT JOIN system_usermeta AS sm ON su.ID = sm.user_id
AND sm.meta_key <> 'market';
如果您要过滤使用meta_key
而没有任何'market'
的用户,请尝试以下操作:
SELECT su.display_name, su.user_email, sm.meta_value
FROM system_users AS su
LEFT JOIN system_usermeta AS sm ON su.ID = sm.user_id
WHERE NOT EXISTS(
SELECT 1
FROM system_usermeta smi
WHERE su.ID = smi.user_id AND smi.meta_key = 'market')
答案 3 :(得分:0)
如果您想检查sm.meta_key
是否不是'market'
,那么您可以使用Thanos Markou的解决方案
SELECT su.display_name, su.user_email, sm.meta_value FROM system_users AS su
JOIN system_usermeta AS sm ON su.ID = sm.user_id
WHERE sm.meta_key <> 'market';
或者,如果您想检查sm.meta_key
是否包含'market'
,那么您可以这样做:
SELECT su.display_name, su.user_email, sm.meta_value FROM system_users AS su
JOIN system_usermeta AS sm ON su.ID = sm.user_id
WHERE sm.meta_key not like '%market%';
如果它可能是'Market'
,那么您可以将文本小写设置为不区分大小写的检查。
答案 4 :(得分:0)
是否需要加入条款?
SELECT su.display_name, su.user_email, sm.meta_value FROM system_users AS su,system_usermeta AS sm where su.ID = sm.user_id
AND sm.meta_key <> 'market';
答案 5 :(得分:-1)
使用此
SELECT su.display_name, su.user_email, sm.meta_value FROM system_users AS su
JOIN system_usermeta AS sm ON su.ID = sm.user_id
WHERE sm.meta_key != 'market';