Let's say I have the following row in my table
table rows
id 63 64 65 66 67 68
if I run the following query, I get 30 rows.
SELECT r1.id, r2,id
FROM rows AS r1
CROSS JOIN rows AS r2
WHERE r1.id!=r2.id
result:
63 64 65 64 66 64 67 64 68 64 64 63 65 63 66 63 67 63 68 63 63 65 64 65 66 65 67 65 68 65 63 66 64 66 65 66 67 66 68 66 63 67 64 67 65 67 66 67 68 67 63 68 64 68 65 68 66 68 67 68
how would I get the following result instead of the above?
63,64 63,65 63,66 63,67 63,68 64,65 64,66 64,67 64,68 65,66 65,67 65,68 66,67 66,68 67,68
as you see, I don't want to get both 63,64 and 64,63, for example.
Simple, only join with values higher than the current one.
select r1.id, r2,id
from rows r1
cross join rows r2
where r1.id < r2.id
Just add one condition. Left side to be always smaller then right. This will eliminate all the unwanted cases.
select r1.id, r2,id from rows as r1 cross join rows as r2 where r1.id!=r2.id and r1.id <r2.id
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With