Условие соединения SQL для 2 таблиц с условиями - PullRequest
0 голосов
/ 06 июля 2018

Знаете ли вы, как отображать только строки в таблице для того же идентификатора, где col3 не 'X'?

Таблица 1:

    ID | col1 | col2 |   
     ---+-----+-----+   
    1 | 0     | 0    |    
    1 | D     | C    |    
    1 | D     | C    |    
    2 | 0     | 0    |    
    2 | D     | C    |    
    2 | D     | C    |   
    3 | D     | C    |   
    3 | D     | C    |   
    3 | D     | C    |

Таблица 2:

     ID | col1 | col2 | col3
     ---+------+------+-----
      1 | 0    | 0    | X
      1 | D    | C    | null
      1 | D    | C    | null
      2 | 0    | 0    | null
      2 | D    | C    | null
      2 | D    | C    | null

например, из двух таблиц выше, он должен отображаться как результат:

    ID | col1 | col2 | 
     ---+------+------+
      2 | 0    | 0    | 
      2 | D    | C    | 
      2 | D    | C    | 
      3 | D    | C    | 
      3 | D    | C    | 
      3 | D    | C    | 

ID 2 (так как все col3 равны нулю) и ID 3 (потому что он в таблице 1, но не в таблице 2, поэтому он как нулевой или как будто у него нет col3 = X)

Он должен работать для всех идентификаторов с несколькими строками по идентификатору и только с одним и тем же идентификатором, когда все строки имеют нулевое значение или отсутствуют в таблице 2, но только в таблице 1.

вот что я попробовал:

    select 
    T.id, T2.col1, T2.col2
    from table1 T 
    inner JOIN table2 T2 on T.ID=T2.ID
    where Cond1
    and T.ID NOT IN 
    (SELECT T2.ID FROM table2 T2 
    WHERE T.ID=T2.ID 
    AND T2.COL3='X') it displays only half of what i want :  ID | col1 | col2 | 
 ---+------+------+
  2 | 0    | 0    | 
  2 | D    | C    | 
  2 | D    | C    | 

Мне нужно иметь также плюс ID = 2, ID = 3 тоже:

3 | D    | C    | 
  3 | D    | C    | 
  3 | D    | C    | 

спасибо

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Вы должны использовать внутреннее объединение для отдельного выбора, где col3! = 'X'

select * from table1 
inner  join (
select distinct id from table2 
where col3 !='X' 
) t on t.id = table1.id
0 голосов
/ 06 июля 2018

Я думаю, вы просто хотите not exists:

select t1.*
from t1
where not exists (select 1
                  from t2
                  where t2.id = t.id and t2.col3 = 'X'
                 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...