特殊加入限制和搜索选项

时间:2011-05-02 12:44:03

标签: mysql join subquery

  

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

1 个答案:

答案 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