2014-10-15 3 views
2

У меня есть 3 таблицы со следующими столбцами:MYSQL Внутренние соединения с OR условием

Table1:

userId | seriesId | content 

Table2:

followerId | followeeId 

Таблица3:

followerId | seriesId 

Что Я пытаюсь сделать что-то вроде этого:

SELECT Table1.content 
FROM Table1 
    (INNER JOIN Table2 ON Table2.followeeId=Table1.userId WHERE Table2.followerId=X) 
OR (INNER JOIN Table3 ON Table3.seriesId=Table1.seriesId WHERE Table3.followerId=X) 

«X» будет некоторое число с динамически сгенерированным числом. Я не уверен, что это правильный подход, но вы получаете то, что я пытаюсь сделать правильно? Мой вопрос: какой правильный способ реализовать что-то подобное? Пожалуйста, дайте мне знать в комментариях, если какая-либо часть моего вопроса не ясна.

+0

Какой результат вы ожидаете? Это не совсем ясно из вашего «псевдо-запроса» –

+0

Мне нужно выбрать «контент» из таблицы 1, где выполняется одно из двух внутренних совпадений, но необязательно оба: –

+0

. Почему вы присоединяетесь к этим двум таблицам, когда вы не используете их столбцы? Пожалуйста, сделайте свое дело немного более ясным – gahse

ответ

2

Используйте UNION:

SELECT Table1.content 
FROM Table1 
INNER JOIN Table2 ON Table2.followeeId=Table1.userId 
WHERE Table2.followerId=X 
UNION 
SELECT Table1.content 
INNER JOIN Table3 ON Table3.seriesId=Table1.seriesId 
WHERE Table3.followerId=X 
+0

Wow thanks. В конце концов, это было просто. :) –

2

Вы можете сделать это слишком ..

SELECT Table1.content 
FROM Table1 
LEFT JOIN Table2 ON Table2.followeeId=Table1.userId 
LEFT JOIN Table3 ON Table3.seriesId=Table1.seriesId 
where Table2.followerId=X or Table3.followerId=X; 

Другой путь Союз

select table1.content 
from table1 
INNER JOIN Table2 ON Table2.followeeId=Table1.userId 
where followerId = X 
union 
select table1.content 
from table1 
INNER JOIN Table3 ON Table3.seriesId = Table1.seriesId 
where Table3.followerId = X; 
+0

Теперь выглядит хорошо. Я, как правило, чаще использую первый, потому что он позволяет при необходимости усложнять ситуацию. Внутри MySQL MySQL всегда будет преобразовывать его в союз. – Austin

Смежные вопросы