数据库结构:
  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/

10-11 21:48