MySQL:标准不存在的行

时间:2018-04-06 14:48:51

标签: mysql

我正在尝试选择Meta列中没有'bar'的所有行的User_ID。

ID   User_ID   Meta
1    User1     foo
2    User2     foo
3    User2     bar
4    User3     foo
5    User4     foo
6    User4     bar

然而,我无法上班。我可以通过10种不同的方式获得具有'bar'的User_Id,但无法弄清楚这一点。这些都不起作用:

SELECT User_ID
FROM t
WHERE NOT EXISTS (SELECT * FROM t
                WHERE t.meta = 'bar') )

以上产生了所有用户,在Meta列中有和没有'bar'。

SELECT User_ID
FROM t
WHERE t.meta <> 'bar'

以上产生了所有用户,在Meta列中有和没有'bar'。

期望的输出应该是:

User1
User3

4 个答案:

答案 0 :(得分:0)

您可以尝试在具有t.meta ='bar'

的User_ID的结果中输入NOT
SELECT distinct User_ID
FROM t
WHERE User_ID NOT IN  (
            SELECT User_ID  
            FROM t
            WHERE trim(t.meta) = 'bar') 

如果您需要不同的结果,请使用distinct子句

答案 1 :(得分:0)

以下是如何操作:

SELECT A.USER_ID
FROM T A
WHERE NOT EXISTS 
(SELECT NULL FROM T B WHERE A.USER_ID=B.USER_ID AND B.META='bar');

SQL Fiddle上看到它。

答案 2 :(得分:0)

SELECT User_ID FROM t WHERE NOT Meta = 'bar';

答案 3 :(得分:0)

如果我理解正确

也许这个查询可以帮到你

SELECT u.user_id
FROM users u
WHERE NOT EXISTS (
  SELECT 1 
  FROM users v
  WHERE v.meta = 'bar'
  AND u.user_id = v.user_id
)