我有2个不同的表格,可容纳不同类型的产品,例如: Phones
或TVs
。这两个表中的每一个都有一个PK。
我还提供了目录功能,其中单个目录可能包含多个电视和多个电话。在catalog_items.idItem
列中,我存储了要添加到目录中的项目的PK(但不是其类型)。
我的问题是,如何只知道加入三个表的ID,如何检索两个产品表中至少有一个产品所在的所有catalog_items
行?
要想象:
表tvs
:
表phones
:
表catalog_items
:
答案 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)
不是存储数据的最佳方式,也不是最有效的方法来检索数据。将所有产品放在一个表中会好得多。
一种替代方法是创建一个将产品表联合起来的视图,然后在简单的两个表内连接中使用该视图。这将允许您按产品表中的任何字段对结果进行排序。