Left join many to manu nie łączy rekordów

0

Hej napotkałem właśnie problem z jednym z zapytań które chciałem napisać
mam taką strukturę w bazie:

CREATE TABLE `insurance` (
  `id` int(11) NOT NULL,
  `name` varchar(500) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `insurance_range` (
  `id` int(11) NOT NULL,
  `comment` text NOT NULL,
  `insurance_id` int(11) DEFAULT NULL,
  `category_id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

W tabeli insurance jest 29 rekordów a w tabeli insurance_range 700 wykonuje następujące zapytanie:
SELECT * FROM `insurance` left join insurance_range on insurance.id = insurance_range.insurance_id i dostaję wyniki nie dla wszystkich rekordów z tabeli insurancje a jedynie dla pierwszego czyli 18 rekordów
Co jest nie tak z tym zapytaniem ?

0
  1. Jak na moje oko, to nie jest MANY-MANY, bo INSURANCE_RANGE dotyczy co najwyżej jednego INSURANCE.
    Obstawiam: 0..1 --- 0..N

  2. Co zwraca: select distinct insurence_id from insurance_range; ?
    (Z dokładnością do dialektu MySQL).

-- edited: Chyba, że INSURANCE_RANGE oznacza coś innego niż mi się wydaje :)

0

@szweszwe - to jest całe zapytanie
@yarel select distinct insurance_id from insurance_range zwraca 29 różnych id-ków

0
Zakręcony Orzeł napisał(a):

@szweszwe - to jest całe zapytanie
@yarel select distinct insurance_id from insurance_range zwraca 29 różnych id-ków

A jak wygląda explain plan dla tego zapytania?

0

Sorki za mały błąd DISTINCT zwraca 18 rekordów.
Explain: screenshot1.png

0

Nie wiem czy dobrze zrozumiałem, czyli do insurance nie dowiązuję Ci wyników z tabeli insurance_range.
Zobacz, jak działa left join, będziesz wszystko wiedział.

0

@yarel w tabeli insurance jest 20 róznych rekordów a w tabeli insurance_range jest koło 500 róznych wpisów

0

OK temat rozwiązany - jest jakiś bug w gui do sql-a które używam - w konsoli wszystko działa ok i w rezultacie dostaję oczekiwany wynik :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1