第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

MySQL的按優(yōu)先級(jí)等效連接

MySQL的按優(yōu)先級(jí)等效連接

搖曳的薔薇 2019-10-21 12:42:55
所有,我在表中有三個(gè)字段,用于定義MySQL數(shù)據(jù)庫(kù)5.0版中存在的父子關(guān)系。表名是tb_Tree,它具有以下數(shù)據(jù):Table Name: tb_TreeId | ParentId | Name--------------------1  | 0        | Fruits2  | 0        | Vegetables3  | 1        | Apple4  | 1        | Orange5  | 2        | Cabbage6  | 2        | Eggplant如果指定了ParentId,如何編寫(xiě)查詢以獲取所有子項(xiàng)。請(qǐng)注意,給出的表?xiàng)l目只是示例數(shù)據(jù),它們可以有更多行。Oracle有一個(gè)“ CONNECT BY PRIOR”子句,但是我沒(méi)有找到與MySQL類似的東西。任何人都可以請(qǐng)教嗎?謝謝
查看完整描述

3 回答

?
冉冉說(shuō)

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊

MySQL不支持遞歸查詢,因此您必須采用困難的方式:


選擇您的根在ParentID = X哪里的行X。

Id從(1)收集值。

對(duì)Id(2)中的每個(gè)重復(fù)(1 )。

繼續(xù)手動(dòng)遞歸,直到找到所有葉子節(jié)點(diǎn)。

如果您知道最大深度,則可以將表連接到自身(使用LEFT OUTER JOINs),使其達(dá)到最大可能深度,然后清除NULL。


您也可以將樹(shù)的表示形式更改為嵌套集。


查看完整回答
反對(duì) 回復(fù) 2019-10-21
?
POPMUISE

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊

這是一個(gè)舊主題,但是由于我在另一個(gè)論壇中遇到了這個(gè)問(wèn)題,所以我想在這里添加它。對(duì)于這種情況,我創(chuàng)建了一個(gè)存儲(chǔ)過(guò)程,該存儲(chǔ)過(guò)程經(jīng)過(guò)硬編碼以處理特定情況。當(dāng)然這樣做確實(shí)有一些缺點(diǎn),因?yàn)椴⒎撬杏脩舳伎梢噪S意創(chuàng)建存儲(chǔ)過(guò)程。


考慮具有節(jié)點(diǎn)和子節(jié)點(diǎn)的下表:


CREATE TABLE nodes (

       parent INT,

       child INT

);


INSERT INTO nodes VALUES

       ( 5,  2), ( 5, 3),

       (18, 11), (18, 7),

       (17,  9), (17, 8),

       (26, 13), (26, 1), (26,12),

       (15, 10), (15, 5),       

       (38, 15), (38, 17), (38, 6),

       (NULL, 38), (NULL, 26), (NULL, 18);

使用此表,以下存儲(chǔ)過(guò)程將計(jì)算一個(gè)由所提供節(jié)點(diǎn)的所有后代組成的結(jié)果集:


delimiter $$

CREATE PROCEDURE find_parts(seed INT)

BEGIN

  -- Temporary storage

  DROP TABLE IF EXISTS _result;

  CREATE TEMPORARY TABLE _result (node INT PRIMARY KEY);


  -- Seeding

  INSERT INTO _result VALUES (seed);


  -- Iteration

  DROP TABLE IF EXISTS _tmp;

  CREATE TEMPORARY TABLE _tmp LIKE _result;

  REPEAT

    TRUNCATE TABLE _tmp;

    INSERT INTO _tmp SELECT child AS node

      FROM _result JOIN nodes ON node = parent;


    INSERT IGNORE INTO _result SELECT node FROM _tmp;

  UNTIL ROW_COUNT() = 0

  END REPEAT;

  DROP TABLE _tmp;

  SELECT * FROM _result;

END $$

delimiter ;


查看完整回答
反對(duì) 回復(fù) 2019-10-21
?
守候你守候我

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個(gè)贊

下面select列出了所有植物及其parentid最高4級(jí)(當(dāng)然,您可以擴(kuò)展該級(jí)):


select id, name, parentid

,(select parentid from tb_tree where id=t.parentid) parentid2

,(select parentid from tb_tree where id=(select parentid from tb_tree where id=t.parentid)) parentid3

,(select parentid from tb_tree where id=(select parentid from tb_tree where id=(select parentid from tb_tree where id=t.parentid))) parentid4 

from tb_tree t

然后您可以使用此查詢獲取最終結(jié)果。例如,您可以通過(guò)以下sql獲取“水果”的所有子代:


select id ,name from (

    select id, name, parentid

    ,(select parentid from tb_tree where id=t.parentid) parentid2

    ,(select parentid from tb_tree where id=(select parentid from tb_tree where id=t.parentid)) parentid3

    ,(select parentid from tb_tree where id=(select parentid from tb_tree where id=(select parentid from tb_tree where id=t.parentid))) parentid4 

    from tb_tree t) tt

where ifnull(parentid4,0)=1 or ifnull(parentid3,0)=1 or ifnull(parentid2,0)=1 or ifnull(parentid,0)=1


查看完整回答
反對(duì) 回復(fù) 2019-10-21
  • 3 回答
  • 0 關(guān)注
  • 474 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)