如果产品表中存在品牌 ID,则从品牌表中获取品牌 ID 名称
Posted
技术标签:
【中文标题】如果产品表中存在品牌 ID,则从品牌表中获取品牌 ID 名称【英文标题】:Fetch brands id name from brand table if that brand id is present in products table 【发布时间】:2021-08-22 11:30:10 【问题描述】:我有两个表:公司和产品 公司
id | name |
---|---|
36 | BMW |
37 | MERCEDES |
39 | LG |
40 | MI |
42 | APPLE |
44 | ONE PLUS |
45 | GODREJ INTERIO |
46 | USHA |
47 | NILKAMAL |
产品
id | brand | cat_id |
---|---|---|
1 | 44 | 11 |
5 | 39 | 11 |
6 | 40 | 11 |
7 | 44 | 11 |
10 | 0 | 0 |
11 | 0 | 27 |
12 | 0 | 21 |
13 | 42 | 11 |
14 | 0 | 0 |
如果品牌 ID 在类别 ID 等于 11 的产品表中可用,我需要从公司表中获取品牌名称和品牌 ID
输出应该如下所示
id | name |
---|---|
39 | LG |
40 | MI |
42 | APPLE |
44 | ONE PLUS |
SELECT b.id, b.name, b.media_file
FROM wo_products p
LEFT JOIN wo_companies b
ON p.brand = b.id
WHERE category = 11 AND user_id = 1
ORDER BY p.id DESC
enter image description here
我从上述查询中得到了很好的结果,但品牌 ID 重复了多次。
【问题讨论】:
【参考方案1】:如果我理解正确,您需要一个 exists
查询,其措辞与您的问题非常相似:
select c.*
from companies c
where exists (select 1
from products p
where p.brand = c.id and p.cat_id = 11
);
【讨论】:
请检查我的查询。【参考方案2】:这就是解决方案
SELECT b.id, b.name, b.media_file
FROM wo_products p
LEFT JOIN wo_companies b
ON p.brand = b.id
WHERE category = 11 AND user_id = 1
GROUP BY id ORDER BY `name` ASC;
【讨论】:
你的问题中查询的区别在哪里? 查询中有一个新的group by 我也得到了空值,所以请告诉我如何跳过它。【参考方案3】:最终解决方案
SELECT DISTINCT b.id, b.name, b.media_file
FROM wo_products p
LEFT JOIN wo_companies b
ON p.brand = b.id
WHERE p.category = 11 AND p.user_id = 1 AND p.brand != ''
GROUP BY id ORDER BY `name` ASC;
【讨论】:
【参考方案4】:如果您不介意轻微的性能损失,您可以使用更容易推理的子查询:
SELECT b.id, b.name, b.media_file
FROM wo_companies b
WHERE b.id in (
SELECT p.brand
FROM wo_products p
WHERE p.cat_id = 11 AND p.user_id = 1
)
【讨论】:
以上是关于如果产品表中存在品牌 ID,则从品牌表中获取品牌 ID 名称的主要内容,如果未能解决你的问题,请参考以下文章