किसी अन्य तालिका अद्यतन समस्या से तालिका बनाना - mysql, sql, sql-server

जब मैं तालिका A में रिकॉर्ड सम्मिलित करता हूं, तो यह तालिका A से तालिका B को अद्यतन नहीं करता है। मैंने एक खंड का उपयोग किया है क्योंकि मैं अपनी तालिका B में तालिका A से कुछ रिकॉर्ड चाहता हूं। यह मेरा कोड है

निर्माण टेबल बी के रूप में ( चुनें * ए से कहाँ है = "छात्र" );

नई विशेषता "छात्र" के साथ तालिका ए में एक नया रिकॉर्ड सम्मिलित करते समय यह तालिका बी अपडेट नहीं करता है। धन्यवाद!

उत्तर:

जवाब के लिए 0 № 1

तुम्हारा बयान: CREATE TABLE B AS ( SELECT * FROM A WHERE STATUS="STUDENT" ); बस अपने से उत्पन्न संरचना का उपयोग कर एक तालिका बनाता है SELECT कथन, तब उस कथन के परिणामों को नई तालिका में कॉपी करता है। यह मूल तालिका का अप-टू-डेट मैच नहीं रखता है। आप एक में देखना चाहते हो सकता है VIEW यदि ऐसा है तो आप क्या चाहते हैं।

तुम कोशिश कर सकते हो:

CREATE VIEW B AS SELECT * FROM A WHERE STATUS = "STUDENT";

जवाब के लिए 0 № 2

यदि आप चाहते हैं कि आप इसे बनाकर स्वचालित कर सकते हैंट्रिगर के साथ ट्रिगर करने पर जानकारी टेबल बी में दर्ज हो जाती है जब आप पंक्ति को तालिका ए में डालते हैं तो मैंने सबसे अच्छा प्रयास किया कि मैं इस शर्त के साथ थोड़ा इरिटेट कर सकता हूं। सम्मिलित किए ट्रिगर्स में उपयोग किया जाता है जैसे कि मूल्य डाला जाता है

CREATE TRIGGER MyTrigger
ON DBO.TableA
AFTER INSERT, UPDATE
AS

IF EXITS (SELECT *
FROM TABLE_B
WHERE (SELECT STATUS
FROM INSERTED I
WHERE STATUS = STUDENT))

BEGIN

INSERT INTO TableB

SELECT *
FROM INSERTED I
WHERE STATUS="STUDENT"
END

ELSE

RAISEERROR("ROW IS NOT A STUDENT");

क्या बेहतर अभ्यास होगा क्योंकि @rabbit ने आवश्यक डेटा के साथ एक दृश्य बनाकर कहा था और अब एक और तालिका जो आपको वास्तविक रूप से आवश्यक थी वह सब कुछ हड़प लेगी:

CREATE VIEW MyView
AS
SELECT * FROM A WHERE STATUS="STUDENT"

YO मूल रूप से एक अन्य तालिका के रूप में दृश्य बनाते हैं और जब भी आपको आवश्यकता होती है तब इसे कॉल करते हैं और यह आपके वास्तविक समय की आवश्यकता वाले डेटा को क्वेरी करेगा। और आप इसे एक मेज की तरह उपयोग कर सकते हैं यदि आपको आवश्यकता हो।


जवाब के लिए 0 № 3
CREATE TABLE B AS ( SELECT * FROM A WHERE STATUS="STUDENT" );

यह क्वेरी केवल एक बार चलेगी और इसे चलाते समय A से B.This में उस समय मौजूद रिकॉर्ड डालेगी, जो अपेक्षित है।

अगर आप चाहते हैं कि हर बार एक नया रिकॉर्ड बनेA को B में दर्ज किए जाने वाले कुछ डेटा में डाला गया है, फिर ट्रिगर्स का उपयोग करें। ट्रिगर इवेंट्स से पहले या बाद में स्वतः क्रियान्वित किए जाते हैं (ट्रिगर_ईवेंट जैसे INSERT, UPDATE, DELETE)।

देखें https://dev.mysql.com/doc/refman/5.5/en/create-trigger.html ट्रिगर पर अधिक जानकारी के लिए


संबंधित सवाल
सबसे लोकप्रिय