仅获得表格"产品"的结果如果他们在另外两个表中有条目(由ID和产品类型列标识)

时间:2014-12-01 09:04:28

标签: mysql sql

我有一个带有“产品”的表格,用于存储产品ID和产品类型(字符串)。

我想要检索所有这些“产品”,将它们连接到另外两个列出两个单独产品的表,并忽略在这两个表中找不到的所有其他产品。我在“产品”表格中有“product_type”。

这是一个示例结构:

  1. products(ID,idProduct,类型)

    1 | 3 | TV

    2 | 4 | TV

    3 | 13 |电话

  2. tvs(ID,名称)

    3 |索尼

    4 |菲利普斯

  3. phones(ID,名称)

    13 |三星Galaxy

  4. 即使products中存在重复的idProduct值,我们也会通过检查type列来识别/加入。 Currenly,我对两个表使用LEFT JOIN的方法无法正常工作,因为如果proucts只包含一种类型的产品,它不会返回任何值。

2 个答案:

答案 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,但我们还必须检查产品是否存在于第一个或第二个表中。