我需要根据producttags表和subcategorytags表查询几个表中的“product tags”。
然后生产标签为“衬衫”的产品。
如果我删除了第一个内连接和“WHERE t.producttag = 'shirt'
”,它就可以了。对于子类别标记部分也是如此。
但是当我尝试两者时,它不会出错,但不会产生任何效果。
SELECT p.datebackinstock, p.datepricedrop, p.id, p.catid, p.subid, p.catname, p.subname,
p.title, p.price, p.photoprimary, p.comingsoon, p.rcstock, p.preorder,
p.bundleroman1, p.bundleroman2, p.bundleroman3, p.bundleroman4, p.bundleroman5,
p.pricedrop FROM products AS p
INNER JOIN producttags AS t ON p.id = t.prodid
INNER JOIN subcategorytags AS s ON p.subid = s.subid
WHERE t.producttag = 'shirt' OR s.tag = 'shirt'
答案 0 :(得分:1)
您必须使用左连接,因为您不知道是否设置了标签。在您的查询中,只有找到producttag
和 a subcategorytag
时才会返回该行。即使没有找到另一个表中的行,左连接也将返回该行。因此,您还需要进行额外检查以确保值不为空。
SELECT p.datebackinstock, p.datepricedrop, p.id, p.catid, p.subid, p.catname, p.subname,
p.title, p.price, p.photoprimary, p.comingsoon, p.rcstock, p.preorder,
p.bundleroman1, p.bundleroman2, p.bundleroman3, p.bundleroman4, p.bundleroman5,
p.pricedrop FROM products AS p
LEFT JOIN producttags AS t ON p.id = t.prodid
LEFT JOIN subcategorytags AS s ON p.subid = s.subid
WHERE (t.producttag NOT NULL AND t.producttag = 'shirt') OR (s.tag NOT NULL AND s.tag = 'shirt')
有关左右联接的详细信息,请参阅mysql docs。
答案 1 :(得分:0)
我会使用left outer join
或者更确切地说,我会尝试,我想:
select
p.`datebackinstock`,
p.`datepricedrop`,
p.`id`,
p.`catid`,
p.`subid`,
p.`catname`,
p.`subname`,
p.`title`,
p.`price`,
p.`photoprimary`,
p.`comingsoon`,
p.`rcstock`,
p.`preorder`,
p.`bundleroman1`,
p.`bundleroman2`,
p.`bundleroman3`,
p.`bundleroman4`,
p.`bundleroman5`,
p.`pricedrop`
from `products` p
left outer join `producttags` t on p.`id` = t.`prodid`
left outer join `subcategorytags` s on p.`subid` = s.`subid`
where t.`producttag` = 'shirt' or s.`tag` = 'shirt'