Open outsmain opened 10 years ago
รบกวนช่วยตรวจสอบให้หน่อยครับ ไม่ทราบว่าตรงตามที่ต้องการหรือป่าวครับ
INSERT INTO NE_LINK_LOG (SRC_IP_ADDR,SRC_GROUP_ID,SRC_ENT_ID,SRC_ATTRIB_KEY_ID,DEST_IP_ADDR,DEST_GROUP_ID,DEST_ENT_ID,DEST_ATTRIB_KEY_ID) SELECT tb1.IP_ADDR,tb1.GROUP_ID,tb1.ENTRY_ID,tb1.ATTRIB_KEY_ID, tb2.IP_ADDR,tb2.GROUP_ID,tb2.ENTRY_ID,tb2.ATTRIB_KEY_ID FROM ( SELECT b.IP_ADDR,b.GROUP_ID,b.ENTRY_ID,b.ATTRIB_KEY_ID,b.NE_RUN_TYPE_ID FROM NE_LINK_RULE a, NE_RUN_ATTRIB b WHERE a.NE_RUN_TYPE_ID = b.NE_RUN_TYPE_ID AND (a.GROUP_ID > 0 AND a.GROUP_ID = b.GROUP_ID) AND a.ATTRIB_KEY_ID=b.ATTRIB_KEY_ID ) AS tb1, (SELECT b.IP_ADDR,b.GROUP_ID,b.ENTRY_ID,b.ATTRIB_KEY_ID,b.NE_RUN_TYPE_ID FROM NE_LINK_RULE a, NE_RUN_ATTRIB b, ATTRIB_LIST c WHERE a.NE_RUN_TYPE_ID = b.NE_RUN_TYPE_ID AND (a.GROUP_ID > 0 AND a.GROUP_ID = b.GROUP_ID) AND a.ATTRIB_KEY_ID=c.ID) AS tb2, ATTRIB_LIST tb3 WHERE tb1.NE_RUN_TYPE_ID=tb3.ATTRIB_TYPE_ID AND tb2.NE_RUN_TYPE_ID=tb3.ATTRIB_TYPE_ID AND tb1.IP_ADDR!=tb2.IP_ADDR AND tb1.GROUP_ID!=tb2.GROUP_ID AND tb1.ENTRY_ID!=tb2.ENTRY_ID AND tb1.ATTRIB_KEY_ID!=tb2.ATTRIB_KEY_ID
มันต้องตรวจสอบครับด้วยว่าไม่ insert record ของค่าเดียวกัน แต่อยู่กลับด้านกันระหว่าง SRC* และ DEST*
SELECT tb1.* FROM (SELECT b.id, b.UPDATE_DATE, b.IP_ADDR, b.GROUP_ID AS GROUP_ID_ATTRIB, b.ENTRY_ID, b.ATTRIB_KEY_ID, b.NE_RUN_TYPE_ID, b.ATTRIB_VALUE, a.GROUP_ID AS GROUP_ID_LINK_RULE FROM NE_LINK_RULE a, NE_RUN_ATTRIB b, ATTRIB_LIST c WHERE a.NE_RUN_TYPE_ID = b.NE_RUN_TYPE_ID AND IF(a.GROUP_ID IS NULL, '', a.GROUP_ID) = IF(b.GROUP_ID IS NULL, '', b.GROUP_ID) AND a.ATTRIB_KEY_ID = b.ATTRIB_KEY_ID AND b.ATTRIB_KEY_ID = c.ID ORDER BY b.ID ASC) AS tb1, (SELECT DISTINCT ATTRIB_TYPE_ID FROM ATTRIB_LIST) d WHERE tb1.NE_RUN_TYPE_ID = d.ATTRIB_TYPE_ID ORDER BY tb1.ID
ข้อมูลที่ได้ไม่ตรงตามเงื่อนไขในการจับคู่ครับ
ใช้ join พร้อมกับ select ตรงๆ ไม่ได้ครับ เพราะ group_id อาจมีค่าเป็น NULL ซึ่งจะไม่มีโอกาส join เจอ record ที่ group_id เป็น null
ต้องเป็น store procedure ที่ select NE_LINK_RULE แล้ว loop เปรียบเทียบกับ NE_RUN_ATTRIB, NE_ATTRIB_LIST เอง ขึ้นกับว่า NE_LINK_RULE.group_id > 0 หรือ NULL
สอบถามครับ
สมมุติ ถ้าข้อมูลที่ select ได้ 3 row จับคู่ row ที่ 1 กับ row ที่ 2 แล้วไปค้นหาข้อมูลใน NE_LINK_LOG สมมุติว่ามีข้อมูล เราจะทำการจับคู่ row ที่ 2 กับ row ที่ 3 แล้วไปค้นหาใน NE_LINK_LOG หรือจะตัด row ที่ 3 ทิ้งครับ
ATTRIB_TYPE_ID ATTRIB_VALUE 3 04:03:08:03:08:06 3 04:03:08:03:08:06 3 04:03:08:03:08:06
ถ้า record ที่ 1 - 3 จาก NE_RUN_ATTRIB ไม่ซ้ำกัน จะต้อง insert ใน NE_LINK_LOG เป็น 2 record คือ
รบกวนช่วย update table NE_RUN_ATTRIB
แล้ว run จับคู่ข้อมูลใหม่ครับ
Create a controller (call from command line) to match data from "NE_RUN_ATTRIB"
It uses matching rules from a "NE_LINK_RULE" where