DB结构:
ID | MasterID(自我识别ID)|产品代码
数据库数据:
1 | 0 |一个
2 | 1 |二
3 | 1 |三个
4 | 0 |五个
5 | 0 |六
我想用他们的孩子选择所有'主'产品(WHERE MasterID = 0)(WHERE MasterID = Master的ID)。 我需要对主产品有限制,但也必须始终选择他们的孩子。 应该可以搜索例如对于Productcode。
我试过像(子查询)这样的东西没有成功:
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 ='三' 1 | 0 |一个
2 | 1 |二
3 | 1 |三个(因为三个确实有一个主人,而主人确实有另一个'那种'(两个))
////////////////////////////
有没有人有想法?
祝你好运, frgtv10
答案 0 :(得分:1)
尝试:
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