MySQL:如何显示没有特定值的行
我对下面的查询有点问题MySQL:如何显示没有特定值的行,mysql,sql,where-clause,Mysql,Sql,Where Clause,我对下面的查询有点问题 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列中设置了“market”的所有用户及其值 但我怎样才能扭转局面呢? 如何显示所有没有与其用户ID关联的元密钥“marke
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列中设置了“market”的所有用户及其值
但我怎样才能扭转局面呢?
如何显示所有没有与其用户ID关联的元密钥“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 <> 'market';
从系统用户选择su.display\u name、su.user\u email、sm.meta\u value作为su
在su.ID=sm.user\u ID上将system\u usermeta作为sm加入
其中sm.meta_键为“市场”;
使用此
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';
我想你需要一个更复杂的查询来解决这个问题。因为您正在检查多行。聚合是一种方法:
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;
我建议您使用
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';
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')
如果您想检查
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';
如果它可能是
'Market'
,那么您可以将文本小写,以进行不区分大小写的检查。是否需要join子句
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';
选择su.display\u name、su.user\u email、sm.meta\u value FROM system\u users AS su、system\u usermeta AS sm,其中su.ID=sm.user\u ID
和sm.meta_键“市场”;
hey down voter,什么是down voting的原因?不要只是否决投票——明确否决投票的原因显然,取消加入并不会增加任何优势。
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';