Есть ли альтернативный способ достижения ниже логики в SQL? - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть две таблицы -> tb1 и tb2. Я выполняю операцию левого соединения над этими таблицами, используя столбец ID, а также у меня есть еще одно условие, например, что один столбец не равен другому столбцу. Ниже приведен пример кода

select * from tb1 LEFT JOIN tb2 ON tb1.id=tb2.id AND tb1.pid!=tb2.pid;

Я могу получить результаты по вышеуказанному запросу.

Но мне нужно знать, есть ли альтернативные способы получить тот же результат, используя sql.?

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Вам кажется, что равные не работают из-за вашего условия соединения и соединения. если мы создадим две таблицы и создадим как ваш запрос

create table t1(id int,pid int);
create table t2 (id int,pid int );
insert into t1 values(1,2),(2,3),(3,4);
insert into t2 values(1,2),(2,3),(3,4);

select t1.* from t1 left join
t2 on t1.id=t2.id and 
t1.pid!=t2.pid
order by t1.id 

id  pid
1   2
2   3
3   4

Возвращает все значения 1-й таблицы, поскольку LEFT JOIN возвращает все записи из левой таблицы (table1) и сопоставленные записи из правой таблицы (table2). Результат равен NULL с правой стороны, если совпадений нет.

Но если вы поместите внутреннее соединение в то же самое, оно не вернет ни одной строки. так что я думаю проблема не в "не равном операторе"

0 голосов
/ 02 сентября 2018

Фактически стандарт SQL использует <> вместо !=.

select * from tb1 LEFT JOIN tb2 ON tb1.id=tb2.id AND tb1.pid<>tb2.pid;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...