MySQL - Выберите Itemlist, JOIN Pricelist -> ГДЕ СПЕЦИАЛЬНАЯ Цена существует по умолчанию - PullRequest
2 голосов
/ 20 ноября 2011

Моя первая таблица - это таблица предметов. (Invoice_inventory) Моя вторая таблица - это прайс-лист (inventory_prices), там у меня есть прайс-лист по умолчанию (company_id = 0) и несколько специальных прайс-листов (но не для каждой компании).

Следующим запросом я пытаюсь получить все товары с указанием цены для company_id = 2. Он должен использовать специальный прайс-лист (company_id = 2, если он существует), иначе он должен использовать цену по умолчанию (company_id = 0).

Я думал, что GROUPING + ORDERING будет работать, но я забыл, что GROUP BY выполняется до ORDER.

Я думаю, что мне может понадобиться подзапрос, но я не уверен.

SELECT invoice_inventory.*, invoice_inventory_prices.* 
FROM invoice_inventory
LEFT JOIN invoice_inventory_prices 
   ON  `invoice_inventory`.`inventory_id`
      = `invoice_inventory_prices`.`inventory_id`
WHERE (company_id = 2 OR company_id = 0)
GROUP BY invoice_inventory.inventory_id 
ORDER BY company_id DESC

Ответы [ 2 ]

2 голосов
/ 20 ноября 2011

Я собираюсь использовать два LEFT JOIN s, первый получит цены по умолчанию dp alias, а второй получит специальные цены (company_id = 2) sp alias

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

Вы не дали список столбцов, поэтому я предположил имя столбца цены.Если вам требуется второй (или более) столбец, вы можете добавить дополнительные операторы CASE.

SELECT i.inventory_id
   , CASE
        WHEN sp.Price IS NOT NULL THEN sp.Price
        ELSE dp.Price
     END AS PriceForItem
FROM invoice_inventory AS i
LEFT JOIN invoice_inventory_prices AS dp ON  i.inventory_id = dp.inventory_id
   AND dp.company_id = 0
LEFT JOIN invoice_inventory_prices AS sp ON  i.inventory_id = sp.inventory_id
   AND sp.company_id = 2
GROUP BY invoice_inventory.inventory_id 
0 голосов
/ 20 ноября 2011

Может быть, вы можете использовать GROUP_CONCAT и получить результирующий результат цены company_id = 2 и company_id = 0 в качестве массива в поле, а затем вы можете проанализировать его, поэтому вы можете попробовать изменить свой запрос следующим образом:*

Используя GROUP_CONCAT, вы получите основную цену и цену по умолчанию в качестве элемента массива в полевых ценах:

+----+-------------------------+
| id |        prices           |
+----+-------------------------+
|  3 | 5,6                     |
+----+-------------------------+

Например, 5 - специальная цена, а 6 - цена по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...