在MySQL查询中同时使用exists和simple值检查

时间:2014-12-06 09:08:10

标签: mysql sql where

我有以下MySQL查询:

SELECT * FROM posts p WHERE
    EXISTS (
        SELECT 1 FROM following f WHERE f.from = 2 AND f.to = p.uid
    )
    OR p.uid = 2

我希望它返回posts的所有记录,其中following有记录WHERE f.from = 2 AND f.to = p.uid以及p.uid = 2的所有记录。

如果我先检查存在,则只返回与exists匹配的记录。如果我只交换匹配p.uid = 2匹配的记录。

2 个答案:

答案 0 :(得分:0)

您可以使用count代替:

SELECT 
  * 
FROM 
  posts p 
WHERE
  (SELECT count(*) FROM following f WHERE f.from = 2 AND f.to = p.uid) > 0 
  OR p.uid = 2

您怎么看?

答案 1 :(得分:0)

另一个问题:

SELECT P.* 
FROM POSTS P 
LEFT JOIN FOLLOWING F ON F.to=P.uid
WHERE P.uid=2 OR F.from=2

如果需要,您可以在select子句中添加distinct