предложение самостоятельного объединения в SQL - PullRequest
0 голосов
/ 06 ноября 2018

У меня проблемы с пониманием того, почему результат такой, какой он есть для этого самостоятельного соединения. Код таблицы, с которой я имею дело:

create table point_2d (x INT, y INT);
insert into point_2d values (-1, -1);
insert into point_2d values (0,0);
insert into point_2d values (-1, -2);

Я хочу выполнить самостоятельное соединение следующим образом:

SELECT *
FROM
point_2d p1
Inner JOIN
point_2d p2
ON p1.x != p2.y;

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

p1.x != p2.y

в коде выше?

Ответы [ 3 ]

0 голосов
/ 06 ноября 2018

в некоторых базах данных оператор! = Пишется как <>, запрос будет такой же

SELECT *
FROM
point_2d p1
Inner JOIN
point_2d p2
ON p1.x <> p2.y;

Если вам не нравится использовать expllicit join, вы также можете использовать этот способ

SELECT *
FROM
point_2d p1, point_2d p2
WHERE p1.x <> p2.y

Но я предпочитаю первый способ, потому что он более явный, и я думаю, что вы можете лучше прочитать запрос

Если у вас есть какие-то сомнения, я нашел для вас список операторов, используемых в SQL https://www.w3schools.com/sql/sql_operators.asp

0 голосов
/ 06 ноября 2018

Ваша таблица состоит из трех строк:

 x   y
-1  -1
 0   0
-1, -2

join является подзапросом декартова произведения. Так что это подмножество:

x1  y1       x2  y2
-1  -1       -1  -1
-1  -1        0   0    <-- p1.x <> p2.y
-1  -1       -1  -2    <-- p1.x <> p2.y
 0   0       -1  -1    <-- p1.x <> p2.y
 0   0        0   0
 0   0       -1  -2    <-- p1.x <> p2.y
-1, -2       -1  -1
-1, -2        0   0    <-- p1.x <> p2.y
-1, -2       -1  -2    <-- p1.x <> p2.y

Ваше состояние p1.x <> p2.y. Это показано в результатах.

Итак, результаты:

x1  y1       x2  y2
-1  -1        0   0
-1  -1       -1  -2
 0   0       -1  -1
 0   0       -1  -2
-1, -2        0   0
-1, -2       -1  -2
0 голосов
/ 06 ноября 2018

Если вы можете понять условие, которое упомянуто в 'ON', это то, что определяет способ соединения таблицы, тогда легче понять, в этом случае условие (объединение значений x таблицы, обозначенной как p1 где он не равен y той же таблицы, обозначенной как p2), например, если вы рассмотрите значение -1 для x в p1, то в этой таблице есть значения, такие как 0, -2 для y, обозначенные как p2, так что строка из таблицы p1, где значение x равно -1, отображается на ту же таблицу, обозначенную как p2, где значения y равны 0, -2, поскольку это то, что указано в условии.

...