2013-01-22 97 views
3

我试图找到一个特定的ID的所有孙子,但我似乎无法让我的连接正确。下面的代码有效,但是我需要从产品表中获取与其关联的产品。如何找到孙子女?

SELECT b.category_id, b.category_name, b.parent, a.parent 
FROM categories AS a, categories AS b 
WHERE a.category_id = b.parent AND a.parent = 119 

当我尝试加入产品表我不断收到一个错误:

SELECT * 
FROM products p 
INNER JOIN products_categories pc 
ON p.product_id = pc.product_id 
INNER JOIN (
     SELECT b.category_id, b.category_name, b.parent, a.parent 
     FROM categories AS a, categories AS b 
     WHERE a.category_id = b.parent AND a.parent = 119 
    )x 

我期望的结果将是有以下几点:(注:看看我的SQL小提琴看模式在代码视图)

(76, 'BR134', 'LEA530664', 'ITEM1234', 1499.99, 'yes', 'This is a nice gun'), 
(77, 'mZCXGT', 'LEA471061', 'qwer345', 89.99, 'yes', 'Testing!'), 
(78, 'ert', 'LEA023991', 'asdf34', 129.99, 'yes', 'Another test to get this right!'), 
(79, 'model test', 'LEA355935', 'item test', 119.99, 'yes', 'This is another test dammit!'), 
(80, 'CZV1354', 'LEA741837', 'LI-1234', 1299.99, 'yes', 'This is a hipoint weapon!'), 
(81, 'PINK12G', 'LEA008558', 'PINK-SHG', 89.99, 'yes', 'YEP! This is pink!'), 
(82, 'BOWTECH', 'LEA762521', 'asdf', 899.99, 'yes', 'This is a test!'), 
(83, 'LX32', 'LEA346903', 'MADEUP', 1499.99, 'yes', 'This is Carters gun.'); 

SQL小提琴:

http://sqlfiddle.com/#!2/dd66c/2

这里是我的架构: enter image description here

+0

有什么错误?有些sql引擎不喜欢select *,当你有连接和类似的语法时。应该选择p。*,pc。* – chris

+0

模式与问题的其余部分不匹配。对于初学者来说,我甚至都不会在任何地方看到“父”字段。 –

+0

@TomvanderWoerdt - 真实的故事,我有错误的形象...我道歉;) – Mike

回答

2

我认为你正在寻找这个(我已经添加了“可调试”类别名称):

SELECT 
    p.product_id 
, p.model 
, p.sku 
, p.item_number 
, p.msrp 
, p.availability 
, p.description 
, grand_child.category_name AS grand_child_category 
, child.category_name AS child_category 
, parent.category_name AS parent_category 
FROM categories parent 
INNER JOIN categories child 
ON parent.category_id = child.parent 
INNER JOIN categories grand_child 
ON child.category_id = grand_child.parent 
INNER JOIN products_categories pc 
ON grand_child.category_id = pc.category_id 
INNER JOIN products p 
ON p.product_id = pc.product_id 
WHERE parent.category_id = 119 
+0

嗯,非常好。这工作很好。谢谢你,很好的工作;) – Mike

+0

Aaha,现在删除我的答案,我看到预期的结果是什么。 +1 – RThomas

相关问题