Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:如何显示没有特定值的行_Mysql_Sql_Where Clause - Fatal编程技术网

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