Не удалось получить точный набор данных из нескольких таблиц, когда я пишу запрос mysql - PullRequest
0 голосов
/ 06 января 2020

Я написал запрос MySQL, чтобы перечислить некоторые торговые точки, которые есть в моих таблицах, а для некоторых торговых точек я назначил несколько сотрудников, и мне нужно перечислить торговые точки с их подробной информацией, назначенным именем персонала и другими деталями. Я добавляю свой запрос ниже

SELECT a.outlet_id
     , a.outlet_name
     , a.owner_name
     , a.address
     , a.pin
     , a.outlet_place
     , a.contact_no
     , a.img
     , a.status
     , b.name
     , b.phone
     , b.id
     , (SELECT SUM(total_amount) FROM tbl_orders WHERE status = "delivered" AND outlet_id = a.outlet_id AND a.status = "active") totalamount 
  FROM tbl_outlet a
     , tbl_staff b
     , tbl_staff_to_outlet c 
 WHERE b.id = c.staff_id 
   AND a.outlet_id = c.outlet_id 
   AND b.status = "active" 
 GROUP 
    BY a.outlet_id

проблема в том, что я получил список торговых точек и детали, которые назначены только сотрудникам. в нем не перечислены торговые точки, которые не назначены никакому персоналу.

У меня есть одна таблица с деталями торговых точек с именем "tbl_outlet" и другая таблица с именем "tbl_staff", в которой есть данные о сотрудниках, и другая таблица "tbl_staff_to_outlet" которые имеют идентификатор торговой точки и идентификатор персонала, чтобы отобразить, какая торговая точка назначена какому персоналу.

1 Ответ

0 голосов
/ 06 января 2020

Я бы предложил вам использовать синтаксис ANSI JOIN для написания JOINS. Это обеспечивает больше ясности. Вы должны использовать OUTER JOINS для возврата значений, даже если в других таблицах нет соответствующих значений.

SELECT a.outlet_id, 
       a.outlet_name, 
       a.owner_name, 
       a.address, 
       a.pin, 
       a.outlet_place, 
       a.contact_no, 
       a.img, 
       a.status, 
       b.NAME, 
       b.phone, 
       b.id, 
       (SELECT Sum(total_amount) 
        FROM   tbl_orders 
        WHERE  status = "delivered" 
               AND outlet_id = a.outlet_id 
               AND a.status = "active") AS totalamount 
FROM   tbl_outlet AS a 
LEFT OUTER JOIN tbl_staff_to_outlet AS c ON a.outlet_id = c.outlet_id 
LEFT OUTER JOIN tbl_staff AS b ON b.id = c.staff_id AND b.status = "active" 
GROUP  BY a.outlet_id 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...