从两个表中获取结果

时间:2019-04-16 18:24:22

标签: mysql sql

我试图在一个查询中从两个表中获取结果,但是问题是我需要where子句中的两个表中的列- 例子

SELECT activity.*,
    (
      SELECT photos 
      FROM posts 
      WHERE activity.content_id = posts.record_number
    ) as p 
FROM activity 
WHERE activity.liked_post > 0 OR activity.comments > 0 OR p > 0 
ORDER BY date DESC 
LIMIT 0,10

此示例不起作用。我不知道如何使此查询工作。如果p = 0应该跳过记录,但是content_id可以是0或任何数字,如果content_id > 0然后需要检查帖子表中的照片,如果content_id = 0必须跳过。 / p>

因此photos表中的posts的值为0或1。

content_id表中的

activity与帖子中的ID / record_number相同

也许是一个令人困惑的问题,但不知道如何解释

2 个答案:

答案 0 :(得分:1)

使用联接而不是对照片进行子选择。查询中的p> 0通过使用联接来处理。结果中仅包含有照片的行。

这应该返回您期望的行:

SELECT a.*,
    p.photos
FROM activity a
LEFT JOIN posts p
    ON a.content_id = p.record_number
WHERE (a.liked_post > 0 OR a.comments > 0)
    AND (a.content_id = p.record_number AND content_id > 0)
        OR liked_post > 0)
ORDER BY date DESC 
LIMIT 0,10;

注意:我为表名加了别名,以减少所需的键入量。

答案 1 :(得分:0)

找到解决方案

SELECT a.*,
       p.photos
FROM activity a
LEFT JOIN content p ON a.content_id = p.record_number
WHERE (a.friend_with > 0
       OR a.liked_post > 0
       OR a.comments > 0)
  OR (a.content_id = p.record_number
      AND photos > 0)
ORDER BY date DESC
LIMIT 0,10