2016-06-24 5 views
0

Это несколько из followon в SQL JOIN where to place the WHERE condition?SQL Join Using и WHERE

Я бы предпочел использовать USING положения о присоединиться, но я еще не в состоянии поставить условие значения поля с соединением.

SELECT 1 
    FROM table1 t1 
    JOIN table2 t2 USING(id) AND t2.field = 0; 

ORA-00933: SQL command not properly ended 

Возможно ли использовать ИСПОЛЬЗОВАНИЕ и другое условие как часть предложения JOIN?

+3

Нет, это невозможно. –

+0

Принятый ответ, на который вы ссылаетесь, низок. См. Мой комментарий к нему. – philipxy

ответ

0

Вы можете использовать:

SELECT 1 
FROM table1 t1 
JOIN table2 t2 USING(id) 
WHERE t2.field = 0; 

Использование USING(id) как с помощью ON t1.id = t2.id за исключением того, что в результате JOIN вместо двух колонн t1.id & t2.id есть только один столбец id.

Для INNER JOIN USING с условием сопровождаемого OUTERJOIN вам нужно подзапрос, чтобы сохранить WHERE с USING:

SELECT ... 
FROM (SELECT id, ... 
    FROM table1 t1 
    JOIN table2 t2 USING(id) 
    WHERE t2.field = 0) s 
LEFT JOIN ...; 

Для OUTERJOIN USING с условием вам нужно подвыбор:

SELECT ... 
FROM table1 t1 
LEFT JOIN (SELECT * 
    FROM table2 t2 
    WHERE t2.field = 0) t2 
USING (id); 

См. this re ON/WHERE с JOIN , См. this re ON/WHERE при смешивании INNEROUTERJOIN s.