我的第一张桌子是一张物品表。 (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
答案 0 :(得分:2)
我将使用两个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
答案 1 :(得分:0)
也许您可以使用GROUP_CONCAT并将company_id = 2和company_id = 0的价格结果作为字段中的数组获得,然后您可以解析它,以便您可以尝试以这种方式更改查询:
SELECT invoice_inventory.inventory_id AS id, GROUP_CONCAT(invoice_inventory_prices.price) AS prices
FROM invoice_inventory
使用GROUP_CONCAT,您将在字段价格中获得主要价格和默认价格作为数组元素:
+----+-------------------------+
| id | prices |
+----+-------------------------+
| 3 | 5,6 |
+----+-------------------------+
例如5是特价,6是默认价格......