数据库结构:
ID | MasterID(ID上的selfref。)|产品代码
数据库数据:
1 | 0 |一
2 | 1 |二
3 | 1 |三
4 | 0 |五
5 | 0 |六
我想选择所有带有其子级(“ WHERE MasterID = Master的ID”)的“主”产品(“ WHERE MasterID = 0”)。
我需要在主产品上有一个限制,但也必须始终选择他们的孩子。
应该可以搜索例如产品代码。
我尝试了类似(Subquery)的尝试,但没有成功:
SELECT * FROM (
SELECT * FROM (
SELECT * FROM products
WHERE MasterID = 0
LIMIT 100
) p1
JOIN products p2 on p1.ID = p2.MasterID
) tmp
WHERE xyz = xyz
/////////////////////////////
编辑:
我需要具备的:
使用Productcode ='One'(或LIMIT 1)的地方:
1 | 0 |一
2 | 1 |二
3 | 1 |三个(因为其他两个确实具有搜索值作为MasterID
其中Productcode ='Three'
1 | 0 |一
2 | 1 |二
3 | 1 |三个(因为三个确实有一个大师,而这个大师又有另一个“种类”(两个))
/////////////////////////////
有人有主意吗?
最好的祝福,
frgtv10
最佳答案
尝试:
LEFT JOIN products p2 on p1.ID = p2.MasterID
而且您不需要3个级别:
SELECT p1.*
, p2.*
FROM (
SELECT * FROM products
WHERE MasterID = 0
LIMIT 100
) p1
LEFT JOIN products p2
ON p1.ID = p2.MasterID
AND p2.Productcode = xyz
上面的代码将返回与Productcode = xyz的儿童相关的所有主产品以及所有其他多达100个(不相关)的主产品。
用样本描述的内容要复杂得多:
( SELECT ID
, masterID
, Productcode
FROM products p
WHERE masterID = 0
AND EXISTS
( SELECT *
FROM products p2
WHERE p.ID = p2.MasterID
AND p2.Productcode = 'two'
)
LIMIT 100
)
UNION
( SELECT ch.ID
, ch.masterID
, ch.Productcode
FROM
( SELECT ID
FROM products p
WHERE masterID = 0
AND EXISTS
( SELECT *
FROM products p2
WHERE p.ID = p2.MasterID
AND p2.Productcode = 'two'
)
LIMIT 100
) AS m
JOIN products ch
ON m.ID = ch.MasterID
)
ORDER BY ID
关于mysql - 特殊连接,带有限制和搜索选项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5857258/