แบบสอบถาม SQL เพื่อเลือกลูกและผู้ปกครอง

ฉันมีตาราง mysql 'taxonomy_term_hierarchy' ที่มี 2 ฟิลด์

tid -- คีย์หลัก: Taxonomy_term_data.tid ของคำนี้
parent -- คีย์หลัก: Taxonomy_term_data.tid ของคำระดับบนสุด 0 หมายถึงไม่มีผู้ปกครอง

ฉันจำเป็นต้องได้รับเงื่อนไขเด็กระดับ 1 ในบางเทอม แต่ถ้าไม่มีลูกก็ควรรับลูกสำหรับผู้ปกครอง สิ่งที่ต้องการ:

SELECT down.tid FROM taxonomy_term_hierarchy down WHERE down.parent=60
IF ( COUNT(down.tid) = 0 ) THEN
   SELECT current.tid FROM taxonomy_term_hierarchy current 
   WHERE current.parent=
        (SELECT its.parent FROM taxonomy_term_hierarchy its
         WHERE its.tid=60)

ฉันสามารถทำได้ด้วยคำถามเดียวหรือไม่


person user1809655    schedule 02.03.2014    source แหล่งที่มา


คำตอบ (1)


ขออภัย ฉันไม่คิดว่าสิ่งนี้จะเป็นไปได้กับแบบสอบถามเดียว เนื่องจากคุณต้องมีคำสั่ง IF เพื่อกำหนดว่าจะใช้แบบสอบถามใด อย่างไรก็ตาม คุณสามารถสร้างกระบวนงานที่เก็บไว้เพื่อจัดการตรรกะสำหรับคุณ และเรียกใช้ได้โดยส่ง tid ลงไป นี่คือขั้นตอนการจัดเก็บที่ฉันสร้างขึ้น:

CREATE PROCEDURE getChildren(in _tid int)
BEGIN

  DECLARE hasChildren BIT;

  SET hasChildren = EXISTS (
    SELECT ''
    FROM taxonomy_term_hierarchy tth
    WHERE tth.parent = _tid
  );

  IF hasChildren THEN
    BEGIN
      SELECT tid, parent
      FROM taxonomy_term_hierarchy
      WHERE parent = _tid;
    END;
  ELSE
    BEGIN
      SELECT tth3.tid, tth3.parent
      FROM taxonomy_term_hierarchy tth1
        INNER JOIN taxonomy_term_hierarchy tth2 ON tth1.parent = tth2.tid
        INNER JOIN taxonomy_term_hierarchy tth3 ON tth2.tid = tth3.parent
      WHERE tth1.tid = _tid;
    END;
  END IF;

END//

ฉันสร้างสคีมาบน ซอ sql นี้ เพื่อให้คุณสามารถทดสอบได้ด้วยตัวเอง

person jtate    schedule 03.03.2014
comment
ยอดเยี่ยม! มันช่วยได้มาก - person user1809655; 03.03.2014