2017-01-26 4 views
-3

t1:SQL JOIN с дополнительными условиями

items, id, [...] 
a  12  
b  21 
c  34 
d  45 
e  52 

t2:

items order 
a  1 
b  2 
others 3 

Желаемые результаты:

items, id, [...], order 
a  12   1 
b  21   2 
c  34   3 
d  45   3 
e  52   3 

Я в принципе хочу, чтобы все, что не делает матч 'а', 'б' , чтобы получить заказ «других». Но с внутренним соединением Im не уверен, как это сделать, я могу только присоединиться, если есть совпадение, мне нужно использовать подзапрос для чего-то просто так?

Select t1.items, t1.id, t2.order 
t1 
inner join 
t2 
On t1.items = t.items 
+0

Пожалуйста, помечать DBMS. – McNets

+2

Когда вы добавили тег SQL, на экране появилось большое окно, предлагающее добавить тег для ** конкретной СУБД **, которую вы используете. Вы все еще не сделали этого. * база данных * не является ** конкретной СУБД **. Какие СУБД вы используете? Они отличаются функциями и синтаксисом, поэтому для вас очень важно включить в него тег. (И в следующий раз не игнорируйте поле, в котором говорится об этом.) Вы также можете включить попытку, которая фактически будет выполнена; тот, который вы опубликовали, является недопустимым синтаксисом на любом диалекте SQL. –

ответ

2

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

select t1.*, coalesce(t2.order, t2other.order) as ordering 
from t1 left join 
    t2 
    on t1.items = t2.items left join 
    t2 t2other 
    on t2other.items = 'other'; 
0

Предполагая, что нет t1.item = заказ вы получите NULL.

select items, id, IsNull(t2.order, 3) order 
from t1 
    left join t2 on t1.items = t2.items; 

Или с помощью сазе:

select items, id, 
     case when t1.items = 'a' or t1.items = 'b' the t2.order 
      else 3 
     end as order 
from t1 
    left join t2 on t1.items = t2.items;