如果列值等于“joined_table1.id”或“joined_table2.id”,如何获取行?

时间:2014-11-28 19:07:18

标签: mysql join

我有2个不同的表格,可容纳不同类型的产品,例如: PhonesTVs。这两个表中的每一个都有一个PK。

我还提供了目录功能,其中单个目录可能包含多个电视和多个电话。在catalog_items.idItem列中,我存储了要添加到目录中的项目的PK(但不是其类型)。

我的问题是,如何只知道加入三个表的ID,如何检索两个产品表中至少有一个产品所在的所有catalog_items行?

要想象:

tvs

  1. ID
  2. 名称
  3. phones

    1. ID
    2. 名称
    3. catalog_items

      1. ID
      2. idItem(可能包含来自tvs.id或phones.id的ID,但也可能是完全不同的产品;我想排除除了电视和手机之外的其他产品ID的行)

1 个答案:

答案 0 :(得分:0)

首先,您确定两个表中没有重复的键值吗? IOW,table tv.id不能存在于phones.tv。

SELECT 
    a.id as cat_id,
    b.id as tv_id,
    b.name as tv_name,
    c.id as phone_id,
    c.name as phone_name
FROM catalog_items a
LEFT JOIN tvs b
    ON a.iditem = b.id
LEFT JOIN
    ON a.iditem = c.id
WHERE NOT(b.id IS NULL) AND NOT(c.id IS NULL)

不是存储数据的最佳方式,也不是最有效的方法来检索数据。将所有产品放在一个表中会好得多。

一种替代方法是创建一个将产品表联合起来的视图,然后在简单的两个表内连接中使用该视图。这将允许您按产品表中的任何字段对结果进行排序。