Otrzymałem następujące zapytanie:

    SELECT      ur.repair_id, ur.repair_complete, ur.repair_noted_by_client, ur.repair_problem, ur.added_at, ur.added_by, ur.repaired_at, ur.repaired_by,
                aa.account_fullname AS added_by_name,
                ar.account_fullname AS repaired_by_name
    FROM        units_repairs AS ur
    LEFT JOIN   (SELECT account_id, account_fullname FROM accounts LIMIT 1) AS aa ON aa.account_id = ur.added_by
    LEFT JOIN   (SELECT account_id, account_fullname FROM accounts LIMIT 1) AS ar ON ar.account_id = ur.repaired_by
    WHERE       ur.unit_id = 1

Zwraca imię i nazwisko tylko wtedy, gdy account_id = 1. Jeśli powiedzmy repaired_by = 2, to powiedzmy NULL...

Dzięki, nie wiem czego mi brakuje.

0
David Bélanger 19 październik 2012, 20:20

2 odpowiedzi

Najlepsza odpowiedź

Dołączasz za pomocą wewnętrznego zapytania:

SELECT account_id, account_fullname FROM accounts LIMIT 1

Gdzie masz LIMIT 1, co daje tylko jeden wiersz (który prawdopodobnie ma naprawiony_by = 1), a następnie chcesz przefiltrować i uzyskać tylko wiersze, w których naprawiony_by wynosi 2...a nie masz tego.

1
Aleksandar Vucetic 19 październik 2012, 20:24

Prawdopodobnie w wierszu nie ma rekordów spełniających warunek repaired_by = 2,

 LEFT JOIN   (SELECT account_id, account_fullname FROM accounts LIMIT 1) AS ar ON ar.account_id = ur.repaired_by

Stąd ar.account_id = ur.repaired_by zwraca NULL.

0
Teena Thomas 19 październik 2012, 20:23