A LEFT JOIN B
совпадает с B RIGHT JOIN A
. Некоторые РСУБД не имеют RIGHT JOIN
, поэтому вы должны переписать вашу RIGHT JOIN
логику в LEFT JOIN
logic
A 1 2 3
B 2 3 4 3
SELECT A.I FROM INNER JOIN B ON B.I = A.I;
output: 2 3, 3
SELECT A.I AS X, B.I AS Y FROM A LEFT JOIN B ON B.I = A.I;
read above code as A on LEFT, JOINs B
output:
X Y
1 NULL
2 2
3 3
3 3
SELECT A.I AS X, B.I AS Y FROM B RIGHT JOIN A ON A.I = B.I;
Прочитайте приведенный выше код как B on RIGHT, JOINs A
. Что точно так же, как А на левом
Что бы ни было слева, всегда оценивается, всегда есть вывод. Вы можете представить себе левое соединение B, B право присоединиться к A как:
var result = new Dictionary<int, int?>();
var A = new int[] { 1, 2, 3 };
var B = new int[] { 2, 3, 4, 3 };
foreach (int aElem in A)
{
bool hasMatch = false;
foreach (int bElem in B)
{
if (bElem == aElem)
{
result.Add(aElem, bElem);
hasMatch = true;
}
}
if (!hasMatch)
result.Add(aElem, null);
}
foreach(int X in result.Keys)
{
MessageBox.Show(string.Format("X {0} Y {1}", X, result[X].HasValue ? result[X].Value.ToString() : "NULL" ));
}