MySQL:如何显示行没有特定值

时间:2015-06-29 12:04:57

标签: 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列中设置了“市场”的所有用户及其值。

但我怎么能转过来呢? 如何向所有没有与其user_ID关联的meta_key“market”的用户显示。

6 个答案:

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