Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ MySQL _ wszystkie pary z jednej tabeli bez powtórzeń

Napisany przez: djszaki 21.12.2019, 15:39:52

potrzebuję pomocy, muszę z jednej tabeli wybrać wszytskie osoby i połączyć je w pary tak aby nie było powtórzeń, póki co udało mi się sparować ale nie daje rady wybrać bez powtórzeń tych samych par

select o1.id, o1.imie, o1.nazwisko, o2.id, o2.imie, o2.nazwisko from osoby o1 join osoby o2 where o1.id != o2.id

2 Ola Nowak 1 Jan Kowalski
3 Ewa Zdisanska 1 Jan Kowalski
4 Ela Oglowska 1 Jan Kowalski
1 Jan Kowalski 2 Ola Nowak
3 Ewa Zdisanska 2 Ola Nowak
4 Ela Oglowska 2 Ola Nowak
1 Jan Kowalski 3 Ewa Zdisanska
2 Ola Nowak 3 Ewa Zdisanska
4 Ela Oglowska 3 Ewa Zdisanska
1 Jan Kowalski 4 Ela Oglowska
2 Ola Nowak 4 Ela Oglowska
3 Ewa Zdisanska 4 Ela Oglowska

Napisany przez: trueblue 21.12.2019, 15:58:46

  1. SELECT IF(o1.id_osoba>o2.id_osoba,o2.id_osoba,o1.id_osoba) AS o1_id_osoba,
  2. IF(o1.id_osoba>o2.id_osoba,o2.imie,o1.imie) AS o1_imie,
  3. IF(o1.id_osoba>o2.id_osoba,o2.nazwisko,o1.nazwisko) AS o1_nazwisko,
  4. IF(o1.id_osoba>o2.id_osoba,o1.id_osoba,o2.id_osoba) AS o2_id_osoba,
  5. IF(o1.id_osoba>o2.id_osoba,o1.imie,o2.imie) AS o2_imie,
  6. IF(o1.id_osoba>o2.id_osoba,o1.nazwisko,o2.nazwisko) AS o2_nazwisko
  7. FROM osoba AS o1 CROSS
  8. JOIN osoba AS o2
  9. WHERE o1.id_osoba<>o2.id_osoba
  10. GROUP BY o1_id_osoba, o1_imie, o1_nazwisko, o2_id_osoba, o2_imie, o2_nazwisko


lub:

  1. SELECT o1.id_osoba,o1.imie,o1.nazwisko,o2.id_osoba,o2.imie,o2.nazwisko
  2. FROM osoba AS o1
  3. INNER JOIN osoba AS o2 ON o2.id_osoba>o1.id_osoba


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)