我期待的是这样的事情:
SELECT *
FROM products as p, cat_index1 as c1, cat_index_2 as c2
WHERE p.pid = c1.cid OR p.pid = c2.cid
不是我预期它可以工作,但EXPLAIN会产生以下错误:
Impossible WHERE noticed after reading const table...
我有一个产品列表和每个类别的表格,我想一次从多个类别中提取信息并加入产品信息。表产品中的产品可以是两类,一类或两类。输出需要是cat_index1与cat_index2的联合,我想加入来自产品的信息。
产品表非常大,其中有很多信息,但类别表只是一列,只包含所述类别成员的产品ID,当然,它们等于产品表中的id列。目前没有设置外键。
有人有什么想法吗?
答案 0 :(得分:3)
SELECT *
FROM products as p
inner join cat_index1 as c1 on (p.pid = c1.cid)
union
SELECT *
FROM products as p
inner join cat_index2 as c2 on (p.pid = c2.cid)
答案 1 :(得分:2)
根据您所描述的结果,我认为您实际上正在寻找OUTER JOIN
。试试这个:
SELECT * FROM products
LEFT OUTER JOIN cat_index1 as c1 ON c1.cid = p.pid
LEFT OUTER JOIN cat_index2 as c2 ON c2.cid = p.pid
此查询将在cat_index1
和cat_index2
中返回所有产品及其相关记录。如果cat_index1
或cat_index2
中不存在匹配记录,则结果集中仍会包含产品行。
答案 2 :(得分:1)
尝试使用WHERE IN()和union cat_index1.cid以及cat_index_2.cid:
SELECT * FROM Products AS P WHERE P.pid IN
(
SELECT cat_index1.cid
UNION
SELECT cat_index_2.cid
)
答案 3 :(得分:1)
尝试使用
SELECT *
FROM products as p
where
EXISTS(select * from cat_index1 as c1 where p.pid = c1.cid) or EXISTS(select * cat_index_2 as c2
WHERE p.pid = c2.cid)