Union All MySQL Заявление для 3 таблиц - PullRequest
1 голос
/ 16 марта 2020

Я пытаюсь получить информацию для отображения из 3 разных таблиц с одинаковой структурой столбцов. Я знаю, как использовать Union All в sql, но когда я это записываю, я получаю 0 результатов. Никаких ошибок или вообще ничего не заполняется.

$sql = 'SELECT
Invoice_
FROM
(
  SELECT
        RQ.Invoice_

        FROM disc_rq_activations RQ
        LEFT JOIN disc_Activations VZ
          ON LEFT(RQ.Related_SN,length(RQ.Related_SN)-1)  = VZ.Device_ID
          WHERE VZ.Device_ID IS NULL
          AND VZ.Purchased_Receivable IS NULL
          AND RQ.District = "'.$region.'"

   UNION ALL

   SELECT
       U.Invoice_

       FROM disc_rq_upgrades U
       LEFT JOIN disc_Upgrades VZ
       ON LEFT(U.Related_SN,length(U.Related_SN)-1) = VZ.Device_ID
       WHERE VZ.Device_ID IS NULL
       AND U.District = "'.$region.'"

   UNION ALL

   SELECT
       O.Invoice_

       FROM disc_rq_optional_services O
       LEFT JOIN disc_optional_services VZ
       ON LEFT(O.Related_SN,length(O.Related_SN)-1) = VZ.Device_ID
       WHERE VZ.Device_ID IS NULL
       AND O.District = "'.$region.'"


) ';
$stmt = $conn->prepare($admin);

#}

$stmt->bindColumn(1,  $Invoice_);
$stmt->bindColumn(2,  $amount);




$stmt->execute();
$numRows = $stmt->rowCount();


if (isset($numRows)) {

Таблицы:

Activations
+----------+--------+
| Invoice_ | Amount |
+----------+--------+
|    86754 | $10.00 |
|    63729 | $20.00 |
|    92647 | $30.00 |
|          |        |
+----------+--------+

Upgrades
+----------+---------+
| Invoice_ | Amount  |
+----------+---------+
|    86754 | $48.00  |
|     7373 | $67.00  |
|    76970 | $300.00 |
|          |         |
+----------+---------+

Opt Services
+----------+--------+
| Invoice_ | Amount |
+----------+--------+
|     3245 | $66.00 |
|     4567 | $15.00 |
|      345 | $32.00 |
+----------+--------+

Цель состоит в том, чтобы отобразить все на одной странице. В настоящее время они все разделены на разные страницы, которые делают для дополнительной работы.

В моем текущем запросе я выбрал только 1 столбец для целей тестирования.

Где я ошибаюсь в этом запросе?

Желаемый результат:

+----------+---------+--------------+
| Invoice_ | Amount  |    Table     |
+----------+---------+--------------+
|    86754 | $10.00  | Activations  |
|    63729 | $20.00  | Activations  |
|    92647 | $30.00  | Activations  |
|    86754 | $48.00  | upgrades     |
|     7373 | $67.00  | upgrades     |
|    76970 | $300.00 | upgrades     |
|     3245 | $66.00  | Opt Services |
|     4567 | $15.00  | Opt Services |
|      345 | $32.00  | Opt Services |
+----------+---------+--------------+

Использование предоставленного ответа по-прежнему не дает данных.

$sql = 'SELECT Invoice_, "Activations" as table from `Activations`
UNION ALL
SELECT Invoice_, "Upgrades" as table from `Upgrades`
UNION ALL
SELECT Invoice_, "Opt Services" as table from `Opt Services`

';

Полный рабочий код:

SELECT
   Invoice_,
   Tracking_,
   Qty,
   Product_SKU,
   Product_Name,
   Unit_Rebate,
   Related_Product,
   Related_SKU,
   Related_SN,
   Related_Cost,
   Related_Price,
   Rate_Plan,
   Customer,
   Sales_Person,
   Sales_Person_ID,
   Sold_On,
   Invoiced_At,
   Original_Invoice,
   Original_Sales_Date,
   Contract_,
   SOC_Code,
   SOC_Code_2,
   Extra_Field,
   Port_Number,
   Region,
   District,
   Vendor_Account_Name,
   'activations' as a 
from
   `disc_rq_activations` 
   LEFT JOIN
      disc_Activations VZ 
      ON LEFT(Related_SN, length(Related_SN) - 1) = VZ.Device_ID 
WHERE
   VZ.Device_ID IS NULL 
   AND VZ.Purchased_Receivable IS NULL 
   AND District = '".$region."' 
UNION ALL
SELECT
   Invoice_,
   Tracking_,
   Qty,
   Product_SKU,
   Product_Name,
   Unit_Rebate,
   Related_Product,
   Related_SKU,
   Related_SN,
   Related_Cost,
   Related_Price,
   Rate_Plan,
   Customer,
   Sales_Person,
   Sales_Person_ID,
   Sold_On,
   Invoiced_At,
   Original_Invoice,
   Original_Sales_Date,
   Contract_,
   SOC_Code,
   SOC_Code_2,
   Extra_Field,
   Port_Number,
   Region,
   District,
   Vendor_Account_Name,
   'upgrades' as b 
from
   `disc_rq_upgrades` 
   LEFT JOIN
      disc_Upgrades VZ 
      ON LEFT(Related_SN, length(Related_SN) - 1) = VZ.Device_ID 
WHERE
   VZ.Device_ID IS NULL 
   AND District = '".$region."' 
UNION ALL
SELECT
   Invoice_,
   Tracking_,
   Qty,
   Product_SKU,
   Product_Name,
   Unit_Rebate,
   Related_Product,
   Related_SKU,
   Related_SN,
   Related_Cost,
   Related_Price,
   Rate_Plan,
   Customer,
   Sales_Person,
   Sales_Person_ID,
   Sold_On,
   Invoiced_At,
   Original_Invoice,
   Original_Sales_Date,
   Contract_,
   SOC_Code,
   SOC_Code_2,
   Extra_Field,
   Port_Number,
   Region,
   District,
   Vendor_Account_Name,
   'optionalServices' as c 
from
   `disc_rq_optional_services` 
   LEFT JOIN
      disc_optional_services VZ 
      ON LEFT(Related_SN, length(Related_SN) - 1) = VZ.Device_ID 
WHERE
   VZ.Device_ID IS NULL 
   AND District = '".$region."'

1 Ответ

1 голос
/ 16 марта 2020

Не думайте, что для этого вам нужны какие-либо подзапросы. Попробуйте следующее:

Данные:

+----------+--------+
| Invoice_ | Amount |
+----------+--------+
| 92647    | 30     |
| 86754    | 10     |
| 63729    | 20     |
+----------+--------+

+----------+--------+
| Invoice_ | Amount |
+----------+--------+
| 86754    | 48     |
| 7373     | 67     |
| 76970    | 300    |
+----------+--------+

+----------+--------+
| Invoice_ | Amount |
+----------+--------+
| 3245     | 66     |
| 4567     | 15     |
| 345      | 32     |
+----------+--------+

Запрос:

select Invoice_, Amount, 'Activations' as table from `Activations`
union all
select Invoice_, Amount, 'Upgrades' as table from `Upgrades`
union all
select Invoice_, Amount, 'Opt Services' as table from `Opt Services`;

Вывод:

+----------+--------+--------------+
| Invoice_ | Amount | Activations  |
+----------+--------+--------------+
| 92647    | 30     | Activations  |
| 86754    | 10     | Activations  |
| 63729    | 20     | Activations  |
| 86754    | 48     | Upgrades     |
| 7373     | 67     | Upgrades     |
| 76970    | 300    | Upgrades     |
| 3245     | 66     | Opt Services |
| 4567     | 15     | Opt Services |
| 345      | 32     | Opt Services |
+----------+--------+--------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...