我有一个带有“产品”的表格,用于存储产品ID和产品类型(字符串)。
我想要检索所有这些“产品”,将它们连接到另外两个列出两个单独产品的表,并忽略在这两个表中找不到的所有其他产品。我在“产品”表格中有“product_type”。
这是一个示例结构:
表products
(ID,idProduct,类型)
1 | 3 | TV
2 | 4 | TV
3 | 13 |电话
表tvs
(ID,名称)
3 |索尼
4 |菲利普斯
表phones
(ID,名称)
13 |三星Galaxy
即使products
中存在重复的idProduct值,我们也会通过检查type
列来识别/加入。 Currenly,我对两个表使用LEFT JOIN
的方法无法正常工作,因为如果proucts
只包含一种类型的产品,它不会返回任何值。
答案 0 :(得分:1)
我建议使用联合 - 这样你就可以从其他表中获取数据,而不仅仅是产品表:
(SELECT p.ID, p.idProduct, p.type, t.name
FROM products p, tvs t
WHERE p.idProduct=t.ID AND p.type = 'tv')
UNION
(SELECT p.ID, p.idProduct, p.type, t.name
FROM products p, phones t
WHERE p.idProduct=t.ID AND p.type = 'phones')
答案 1 :(得分:0)
SELECT * FROM products p
LEFT JOIN tvs tvs ON tvs.id=p.idProduct AND p.type="tv"
LEFT JOIN phones phones on phones.id=p.idProduct AND p.type="phone"
WHERE (tvs.id IS NOT NULL OR phones.id IS NOT NULL)
自我回答,但我认为其他人可能会觉得有用。
特技部分是OR
条件中的WHERE
。我们正在进行LEFT JOIN,但我们还必须检查产品是否存在于第一个或第二个表中。