กระทู้เก่าบอร์ด อ.Yeadram
999 8
URL.หัวข้อ /
URL
วิธีแบ่งตารางยังไงครับ
นี่เป็น ตัวอย่างจาก excell ครับ
ผมสับสนอย่ครับ ว่าจะเเบ่งเป็นกี่ตาราง อะรั่ยบ้าง และความสัมพันธ์ ยังไงบ้าง เพราะข้อมูลมันเยอะมากครับ ผมเป็นมือใหม่ด้วยครับ
8 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R20084
วิธีการหาว่าเราควรแยกอะไรไปอยู่เทเบิลไหนนั้น เราเรียก database normalization ลองอ่านดูนะครับ หาอธิบายพร้อมตัวอย่างเยอะแยะในเน็ท
3 @R20085
ขอถามอีกอย่างหนึ่ง ครับ
ถ้าตารางรายการ มีสองตาราง แล้วเราจะให้มันเช็ครหัสของรายการ โดยเอาตารางรายการแรกเป็นข้อมูลเก่า และตารางรายการที่สองเป็นรายการใหม่ แล้วเราจะให้เช็คระหว่างสองตารางนี้ รหัสไหนไม่ตรงกัน ให้มันขึ้น pop up ขึ้นมา คือ pop up รหัสรายการ ที่ไม่ตตรงกัน ต้องทำยังไงครับ ช่วยด้วยครับ...
email: lifestybyzuhanju@gmail.com
ถ้าตารางรายการ มีสองตาราง แล้วเราจะให้มันเช็ครหัสของรายการ โดยเอาตารางรายการแรกเป็นข้อมูลเก่า และตารางรายการที่สองเป็นรายการใหม่ แล้วเราจะให้เช็คระหว่างสองตารางนี้ รหัสไหนไม่ตรงกัน ให้มันขึ้น pop up ขึ้นมา คือ pop up รหัสรายการ ที่ไม่ตตรงกัน ต้องทำยังไงครับ ช่วยด้วยครับ...
email: lifestybyzuhanju@gmail.com
5 @R20089
อาจารครับช่วยดูหน่อยครับ ว่ามีอะไรที่ตกหรือป่าวครับ
เปนตารางเปรียบเทียบน่ะครับ
ผมจะเช็ค ID กับ price(ราคา)
ตารางที่1ผม มี(ตารางสมมุติ ครับ) ตารางที่สองคล้ายกับตารางที่1ครับ
itemtable
itemID itemname unit price category
0001 เสาไฟฟ้า ต้น 1200 CA
ตารางที่สองคล้ายกับตารางที่1ครับ
ผมจะให้มันหา รายการ ข้อมูลที่ต่างกัน ครับ
แต่มันแจ้งว่า มีoperator บางอย่างไม่ครบ ครับ
นี่ คือ โคต ครับ
SELECT item.itemID,
item.price AS [price(item)],
item.itemID AS [itemID(item)],
(SELECT s.price FROM newitem AS s WHERE s.itemID = item.itemID) AS [price(newitem)],
FROM item LEFT JOIN newitem ON item.[price] = newitem.[price]
WHERE (newitem.price) Is Null;
UNION
SELECT newitem.itemID,
(SELECT s.price FROM newitem AS s WHERE s.itemID = item.itemID) AS [price(item)],
newitem.price AS [price(newitem)],
FROM newitem LEFT JOIN item ON newitem.itemID = item.itemID
WHERE (item.price) Is Null;
เปนตารางเปรียบเทียบน่ะครับ
ผมจะเช็ค ID กับ price(ราคา)
ตารางที่1ผม มี(ตารางสมมุติ ครับ) ตารางที่สองคล้ายกับตารางที่1ครับ
itemtable
itemID itemname unit price category
0001 เสาไฟฟ้า ต้น 1200 CA
ตารางที่สองคล้ายกับตารางที่1ครับ
ผมจะให้มันหา รายการ ข้อมูลที่ต่างกัน ครับ
แต่มันแจ้งว่า มีoperator บางอย่างไม่ครบ ครับ
นี่ คือ โคต ครับ
SELECT item.itemID,
item.price AS [price(item)],
item.itemID AS [itemID(item)],
(SELECT s.price FROM newitem AS s WHERE s.itemID = item.itemID) AS [price(newitem)],
FROM item LEFT JOIN newitem ON item.[price] = newitem.[price]
WHERE (newitem.price) Is Null;
UNION
SELECT newitem.itemID,
(SELECT s.price FROM newitem AS s WHERE s.itemID = item.itemID) AS [price(item)],
newitem.price AS [price(newitem)],
FROM newitem LEFT JOIN item ON newitem.itemID = item.itemID
WHERE (item.price) Is Null;
6 @R20090
Alias Name ไม่สามารถมีวงเล็บได้ครับ เช่น item.price AS price(item) อย่างนี้ไม่ได้ คุณอาจตั้งชื่อเป็น price_item แทนก็ได้ แล้วไม่ต้องมี bracket [ ] ครับ
7 @R20098
อาจารยครับ ขอถามอีกครับ
ตาราง1 ผมมีรายการ 535 reccord ตารางที่2ผมมีรายการ 721 record
แต่พอผมมาเปรียบเทีนย รหัสรายการ โดยเอาตารางที่2 ตั้งเป็น lift join มันกลับมีรายการ 190 reccord ทั้งๆที่มัน ต้องออกมาเป็น 186 reccord
แต่พอผมมาเทียบ ราคาที่ต่างกัน มันก้ออกมาเป็น 169 ทั้งๆที่ต้องออกมาเป็น เท่ากับ186 หรือมากกว่า
แต่พอผมเอา การเปรียบเทียบรหัส กับการ เปรียบเทียบราคา มันก้อออกมาเปน 169 record
ผมอยากทราบว่า มันเป็นเพราะอรั่ยครับ
-------------------------------------------------------------------------
โคตเปรียบเทียบรหัส
SELECT newitem.ID, newitem.itemID, newitem.itemName
FROM newitem LEFT JOIN item ON newitem.[itemID] = item.[itemID]
WHERE (((item.itemID) Is Null));
---------------------------------------------------------------------------
โคตเปรียบเทียบราคา
SELECT newitem.ID, newitem.price, newitem.itemName
FROM newitem LEFT JOIN item ON newitem.[price] = item.[price]
WHERE (item.price) Is Null;
-----------------------------------------------------------------------------------
โคตที่มาunion กัน
SELECT item.ID,
item.itemID AS table_item_ID, item.price AS table_item_price, item.itemname AS table_item_name,
(SELECT s.itemID FROM newitem AS s WHERE s.itemID = item.itemID) AS table_newitem_ID,
(SELECT s.price FROM newitem AS s WHERE s.itemID = item.itemID) AS table_newitem_price
FROM item LEFT JOIN newitem ON (item.price=newitem.price) AND (item.itemID=newitem.itemID)
WHERE (((newitem.itemID) Is Null));
UNION
SELECT newitem.ID, newitem.itemID, newitem.price, newitem.itemName,
(SELECT s.itemID FROM newitem AS s WHERE s.itemID = item.itemID) AS table_item_ID,
(SELECT s.price FROM newitem AS s WHERE s.itemID = item.itemID) AS table_item_price
FROM newitem LEFT JOIN item ON newitem.[itemID] = item.[itemID]
AND newitem.[price] = item.[price]
WHERE (((item.itemID) Is Null));
ขอบคุณครับ
ตาราง1 ผมมีรายการ 535 reccord ตารางที่2ผมมีรายการ 721 record
แต่พอผมมาเปรียบเทีนย รหัสรายการ โดยเอาตารางที่2 ตั้งเป็น lift join มันกลับมีรายการ 190 reccord ทั้งๆที่มัน ต้องออกมาเป็น 186 reccord
แต่พอผมมาเทียบ ราคาที่ต่างกัน มันก้ออกมาเป็น 169 ทั้งๆที่ต้องออกมาเป็น เท่ากับ186 หรือมากกว่า
แต่พอผมเอา การเปรียบเทียบรหัส กับการ เปรียบเทียบราคา มันก้อออกมาเปน 169 record
ผมอยากทราบว่า มันเป็นเพราะอรั่ยครับ
-------------------------------------------------------------------------
โคตเปรียบเทียบรหัส
SELECT newitem.ID, newitem.itemID, newitem.itemName
FROM newitem LEFT JOIN item ON newitem.[itemID] = item.[itemID]
WHERE (((item.itemID) Is Null));
---------------------------------------------------------------------------
โคตเปรียบเทียบราคา
SELECT newitem.ID, newitem.price, newitem.itemName
FROM newitem LEFT JOIN item ON newitem.[price] = item.[price]
WHERE (item.price) Is Null;
-----------------------------------------------------------------------------------
โคตที่มาunion กัน
SELECT item.ID,
item.itemID AS table_item_ID, item.price AS table_item_price, item.itemname AS table_item_name,
(SELECT s.itemID FROM newitem AS s WHERE s.itemID = item.itemID) AS table_newitem_ID,
(SELECT s.price FROM newitem AS s WHERE s.itemID = item.itemID) AS table_newitem_price
FROM item LEFT JOIN newitem ON (item.price=newitem.price) AND (item.itemID=newitem.itemID)
WHERE (((newitem.itemID) Is Null));
UNION
SELECT newitem.ID, newitem.itemID, newitem.price, newitem.itemName,
(SELECT s.itemID FROM newitem AS s WHERE s.itemID = item.itemID) AS table_item_ID,
(SELECT s.price FROM newitem AS s WHERE s.itemID = item.itemID) AS table_item_price
FROM newitem LEFT JOIN item ON newitem.[itemID] = item.[itemID]
AND newitem.[price] = item.[price]
WHERE (((item.itemID) Is Null));
ขอบคุณครับ
8 @R20101
คิวรี่แรก หาเรคอร์ดที่ itemID มีอยู่ในเทเบิล newitem แต่ไม่มีในเทเบิล item
คิวรี่สอง หาเรคอร์ดที่ราคามีอยู่ในเทเบิล newitem แต่ไม่มีในเทเบิล item
คิวรี่ที่สาม หาเรคอร์ดที่ ItemIDบวกกับราคาของมัน มีอยู่ในเทเบิล item แต่ไม่มีในเทเบิล newitem รวมเข้ากับ เรคอร์ดที่ ItemIDบวกกับราคาของมัน มีอยู่ในเทเบิล newitem แต่ไม่มีในเทเบิล item
ทั้ง 3 คิวรี่นี้ไม่ได้มีอะไรบ่งบอกเลยว่า ผลรวมของส่วนไหน ต้องเท่ากับ ค่าอะไรอย่างที่คุณเข้าใจเลย ข้อมูลที่คุณมีในเทเบิลทั้งสอง มันให้ผลลัพธ์ที่ถูกต้องตามคิวรี่แน่นอน ความสำคัญอยู่ที่คุณพอมองออกหรือไม่ว่าคิวรี่ทั้ง 3 ตัวมันทำอะไรกันแน่
คิวรี่สอง หาเรคอร์ดที่ราคามีอยู่ในเทเบิล newitem แต่ไม่มีในเทเบิล item
คิวรี่ที่สาม หาเรคอร์ดที่ ItemIDบวกกับราคาของมัน มีอยู่ในเทเบิล item แต่ไม่มีในเทเบิล newitem รวมเข้ากับ เรคอร์ดที่ ItemIDบวกกับราคาของมัน มีอยู่ในเทเบิล newitem แต่ไม่มีในเทเบิล item
ทั้ง 3 คิวรี่นี้ไม่ได้มีอะไรบ่งบอกเลยว่า ผลรวมของส่วนไหน ต้องเท่ากับ ค่าอะไรอย่างที่คุณเข้าใจเลย ข้อมูลที่คุณมีในเทเบิลทั้งสอง มันให้ผลลัพธ์ที่ถูกต้องตามคิวรี่แน่นอน ความสำคัญอยู่ที่คุณพอมองออกหรือไม่ว่าคิวรี่ทั้ง 3 ตัวมันทำอะไรกันแน่
Time: 0.2978s
เทเบิล Item : รหัสรายการ,ชื่อรายการ,รหัสหน่วยนับ เช่น (1050040001,แคแปซิเตอร์ 1 เฟส, S)
เทเบิล Type : รหัสประเภทบริการ, ชื่อเรียก เช่น (S, การติดตั้ง) หรือ (D, การรื้อถอน)
เทเบิล Service : รหัสบริการ, ชื่อเรียก เช่น (P, อุปกรณ์) หรือ (P15, อุปกรณ์+15%) หรือ (L, ค่าแรง)
เทเบิล Fee: รหัสรายการ, รหัสประเภทบริการ, รหัสบริการ, มูลค่า เช่น (1050040001, S, P, 2225.00) หรือ (1050040001, S, L, 225.00) หรือ (1050040001, D, L, 112.50)