我的表格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,似乎我不能这样做。这样做的正确方法是什么?
答案 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