2013-10-15 3 views
0

Я хочу, чтобы сделать определенный порядок JOIN и(A JOIN B) присоединиться (C присоединиться к D)

SELECT * 
FROM (lives_in as t1 NATURAL JOIN preferences p1) l1 
JOIN (lives_in t2 NATURAL JOIN preferences p2) l2 
ON l1.dormid = l2.dormid 

Возвращает ошибку.

Любой может помочь? Большое спасибо!

+0

Какая ошибка? –

+0

Пожалуйста, разместите синтаксис таблицы для создания таблиц. –

ответ

2

Ваших псевдонимы запросы отсутствует пункт SELECT, поэтому попробуйте следующее:

SELECT * 
FROM (
    select * -- added this 
    FROM lives_in as t1 
    NATURAL JOIN preferences p1) l1 
JOIN (
    select * -- added this 
    FROM lives_in t2 
    NATURAL JOIN preferences p2) l2 
ON l1.dormid = l2.dormid 
+0

Спасибо, сработало! – BersaKAIN

1

Порядок объединений не имеет значения для результатов. Вы, наверное, хотите что-то вроде этого:

SELECT * 
FROM lives_in t1 
NATURAL JOIN preferences p1 ON p1.some_id = t1.id 
NATURAL JOIN preferences p2 ON p2.some_id = t1.id 

Кроме того, большинство людей называют это INNER JOIN, не NATURAL JOIN, кстати.

+0

Btw, я не знаю, как связаны таблицы предпочтений и lives_in (мое предположение происходит через 'some_id'), но вам нужно определить эту связь, иначе JOIN не имеет смысла. –

+3

Естественное соединение является внутренним соединением, но где условие объединения * подразумевается *, сопоставляя все столбцы с одинаковым именем. В основном жучок-фест ждет. – Bohemian

1

Надеется, что это будет полезно.

SELECT * 
FROM (
select * from lives_in as t1 NATURAL JOIN preferences p1 
) l1 
JOIN (
select * from lives_in t2 NATURAL JOIN preferences p2 
) l2 
ON l1.dormid = l2.dormid 
Смежные вопросы