如果我理解正确,您可能是指可口可乐的芬达,反之亦然。
SELECT p.id_product,
CONCAT(p.name_product, ' of ', p1.name_product) name_product,
p.has_choice,
p.choice_id
FROM products p JOIN products p1
ON p.choice_id = p1.id_product
请注意,在这种特殊情况下INNER JOIN
,无需has_choice
获取作为父产品选择的产品。
输出:
| ID_PRODUCT | NAME_PRODUCT | HAS_CHOICE | CHOICE_ID |
-------------------------------------------------------------
| 3 | Fanta of Coca-Cola | 0 | 2 |
| 4 | Sprite of Coca-Cola | 0 | 2 |
这是SQLFiddle演示。
UPDATE1要获取所有产品的列表,无论它们是否是您需要使用的产品选择LEFT JOIN
。要在产品名称中搜索父产品和选择,请在WHERE
子句中使用适当的表别名。
SELECT p.id_product,
CASE WHEN p1.id_product IS NULL THEN
p.name_product
ELSE
CONCAT(p.name_product, ' of ', p1.name_product)
END name_product,
p.has_choice,
p.choice_id
FROM products p LEFT JOIN products p1 -- use LEFT JOIN here
ON p.choice_id = p1.id_product
WHERE p.has_choice = 0 -- filter out parent products
AND (p.name_product LIKE '%a%' -- search in product name
OR
p1.name_product LIKE '%a%') -- search in product name of a parent product
CASE
在该查询中,允许为不是选择的产品使用简单的产品名称。
输出:
| ID_PRODUCT | NAME_PRODUCT | HAS_CHOICE | CHOICE_ID |
-------------------------------------------------------------
| 3 | Fanta of Coca-Cola | 0 | 2 |
| 4 | Sprite of Coca-Cola | 0 | 2 |
| 5 | Axion | 0 | 0 |
这是SQLFiddle演示。