如何将OR应用于JOIN ... ON语句

时间:2011-12-25 04:23:40

标签: mysql

我的表格place包含author_id,表格place_user_relation包含user_id列,place_id

我想获取`place.id`,其中`place_user_relation.user_id = 1`或`place.author_id = 1`。问题是这个标准在两个表中。据我所知,我写了一个错误的查询:

    SELECT r.*,p.* FROM place_user_relation as r
    JOIN place as p
    ON p.place_id=r.place OR p.author_id=1
    WHERE r.user_id=1
    /*I also tried WHERE r.user_id=1 OR p.author_id=1*/
 其中包含ON语句中的OR,似乎我不能这样做。这样做的正确方法是什么?

3 个答案:

答案 0 :(得分:1)

试试这个:

SELECT p.id
  FROM place_user_relation r JOIN place p ON p.id = r.place_id
 WHERE p.author_id = 1
    OR r.user_id = 1

答案 1 :(得分:0)

SELECT r.*,p.* FROM place_user_relation as r
JOIN place as p
ON p.place_id=r.place
WHERE r.user_id=1
union 
SELECT r.*,p.* FROM place_user_relation as r, place as p
    WHERE r.user_id=1 AND p.author_id=1

答案 2 :(得分:0)

MySQL可能只是不喜欢ON子句中的一个条件只引用其中一个表这一事实。尝试将其作为CROSS JOIN并将所有条件移动到WHERE子句中,并使用TRUE作为ON子句(因为显然需要ON)...

SELECT r.*,p.* FROM place_user_relation as r
CROSS JOIN place as p
ON true
WHERE (p.place_id=r.place OR p.author_id=1) and r.user_id=1
@ arnon-rotem-gal-oz建议的UNION解决方案也应该有效。