SQL සේවාදායකය සමඟ INNER JOIN භාවිතා කිරීම මකා දැමිය හැක්කේ කෙසේද?


1313

මට SQL Server 2008INNER JOIN හි භාවිතයෙන් මකා දැමීමට අවශ්‍යයි .

නමුත් මට මෙම දෝෂය ඇතිවිය:

Msg 156, 15 වන මට්ටම, රාජ්‍ය 1, 15 වන පේළිය
'INNER' යතුර අසල වැරදි වාක්‍ය ඛණ්ඩයකි.

මගේ කේතය:

DELETE FROM WorkRecord2 
INNER JOIN Employee ON EmployeeRun=EmployeeNo
WHERE Company = '1' AND Date = '2013-05-06'

2
උදාහරණයක් සී තුළ ප්රලේඛනය දර්ශන භාවිතා කරන ආකාරය DELETEබැඳගන්නා සමග
Pondlife

1
උදාහරණ C හි කර්සරය සහ බාහිර දේවල් පොකුරක් ද භාවිතා කරයි
reggaeguitar

වගුව 1 සිට වගුව 1 සිට මකන්න t1 අභ්‍යන්තර සම්බන්ධක වගුව 2 t2 මත t1.id = t2.id; විස්තර වශයෙන් youtu.be/_tyUVrS2iH4
අම්රෙෂ් කුමාර් සිං

Answers:


2294

ඔබ මකා දමන්නේ කුමන වගුවෙන්ද යන්න සඳහන් කළ යුතුය, මෙන්න අන්වර්ථයක් සහිත අනුවාදයකි:

DELETE w
FROM WorkRecord2 w
INNER JOIN Employee e
  ON EmployeeRun=EmployeeNo
WHERE Company = '1' AND Date = '2013-05-06'

9
වගු දෙකෙන්ම මකා දැමීම සඳහා SQL සේවාදායකය සඳහා නිවැරදි සින්ටැක්ස් ලබා දිය හැකිද?
oabarca

45
20 user2070775 වගු 2 කින් මකා දැමීමට SQL සේවාදායකයේ ඔබට වෙනම ප්‍රකාශ 2 ක් භාවිතා කළ යුතුය.
ටැරන්

8
@ user2070775 SQL Server, ඔබ ගනුදෙනු හා ව්යාජ-වගු, රූපයේ පරිදි භාවිතා කළ හැකිය stackoverflow.com/questions/783726/...
Mathieu Rodic

1
AthMathieuRodic බෙදාගැනීම ගැන ස්තූතියි. මගේ සැකසුම තුළ මම මේස 2 න් වෙන වෙනම මකා දැමුවහොත් 2 වන වගුවෙන් කුමන පේළි මකා
දැමිය යුතුදැයි මම නොදනිමි,

2
වර්ක් රෙකෝඩ් 2 වගුව සඳහා අන්වර්ථය වන ෂහ්යාර්සල්ජෝගි.
ටැරන්

158

ඔබට මැකීමට වගුව නියම කළ යුතු බැවින් ඔබට වාර්තා මැකීමට අවශ්‍ය ස්ථානය අතර DELETEසහ අතර ඇති වගුවේ නම එක් කරන්න FROM. ORDER BYවාර්තා මකා දැමීමේදී ඇණවුම් කිරීමට කිසිවක් නොමැති නිසා වගන්තියද ඉවත් කරන්න .

එබැවින් ඔබගේ අවසාන විමසුම මේ ආකාරයට විය යුතුය:

    DELETE WorkRecord2 
      FROM WorkRecord2 
INNER JOIN Employee 
        ON EmployeeRun=EmployeeNo
     WHERE Company = '1' 
       AND Date = '2013-05-06';

3
ඔබ පළමු වගුවෙන් මකා දැමීමට අදහස් කරන්නේ නම් මෙය SQL සේවාදායකයේ ක්‍රියාත්මක වේ.
ට්‍රෝයිස්ටෙවන්

1
wmatwonk: ඔබ දෙවන වගුවේ නම භාවිතා කරන්නේ නම් දෙවන වගුවේ සිට මකා දැමිය හැකිය. උදා භාවිතා කිරීම DELETE Employeeවගුව වෙනුවට සේවක වගුවෙන් මැකෙනු ඇත WorkRecord2.
hims056


30

මෙය ඔබට ප්‍රයෝජනවත් විය හැකිය -

DELETE FROM dbo.WorkRecord2 
WHERE EmployeeRun IN (
    SELECT e.EmployeeNo
    FROM dbo.Employee e
    WHERE ...
)

නැතහොත් මෙය උත්සාහ කරන්න -

DELETE FROM dbo.WorkRecord2 
WHERE EXISTS(
    SELECT 1
    FROM dbo.Employee e
    WHERE EmployeeRun = e.EmployeeNo
        AND ....
)

1
SQL සේවාදායකයේ ක්‍රියාත්මක වන එකම පිළිතුර මෙයයි. අයිඩී තෝරන්න ... එක්වන්න ... එක්වන්න වැනි ඔබේ විමසුම ගොඩනඟා එය අනුකාරකයක් ලෙස ඔතා අයිඩී (උපවගන්තිය) ඇති (වගුව) වෙතින් මකා දමන්න
ක්‍රිස් මොස්චිනි


16

එය විය යුත්තේ:

DELETE zpost 
FROM zpost 
INNER JOIN zcomment ON (zpost.zpostid = zcomment.zpostid)
WHERE zcomment.icomment = "first"       

12

SQL සේවාදායක කළමනාකරණ චිත්‍රාගාරයේදී මට පහසුවෙන් SELECTවිමසුමක් නිර්මාණය කළ හැකිය .

SELECT Contact.Naam_Contactpersoon, Bedrijf.BedrijfsNaam, Bedrijf.Adres, Bedrijf.Postcode
FROM Contact
INNER JOIN Bedrijf ON Bedrijf.IDBedrijf = Contact.IDbedrijf

මට එය ක්‍රියාත්මක කළ හැකි අතර මගේ සියලු සම්බන්ධතා පෙන්වනු ලැබේ.

දැන් SELECTa ට වෙනස් කරන්න DELETE:

DELETE Contact
FROM Contact
INNER JOIN Bedrijf ON Bedrijf.IDBedrijf = Contact.IDbedrijf

SELECTප්රකාශයේ ඔබ දුටු සියලුම වාර්තා ඉවත් කරනු ලැබේ.

ඔහු එම ක්‍රියා පටිපාටිය සමඟම වඩාත් දුෂ්කර අභ්‍යන්තර සම්බන්ධතාවයක් ඇති කිරීමට පවා ඔබට හැකිය, උදාහරණයක් ලෙස:

DELETE FROM Contact
INNER JOIN Bedrijf ON Bedrijf.IDBedrijf = Contact.IDbedrijf
INNER JOIN LoginBedrijf ON Bedrijf.IDLoginBedrijf = LoginBedrijf.IDLoginBedrijf

11

මෙම අනුවාදය ක්රියා කළ යුතුය

DELETE WorkRecord2
FROM WorkRecord2 
INNER JOIN Employee ON EmployeeRun=EmployeeNo
Where Company = '1' AND Date = '2013-05-06'


9

මෙම විමසුම උත්සාහ කරන්න:

DELETE WorkRecord2, Employee 
FROM WorkRecord2 
INNER JOIN Employee ON (tbl_name.EmployeeRun=tbl_name.EmployeeNo)
WHERE tbl_name.Company = '1' 
AND tbl_name.Date = '2013-05-06';

8
මට හොඳටම විශ්වාසයි මකා දැමිය හැක්කේ එක් වගුවක් පමණක් බව. මෙය මට වැඩ කරන්නේ නැත.
ස්ටීල්ට් රබ්බි

3
MySQL හි මකාදැමීම සඳහා ඔබට බහු වගු නියම කළ හැකි යැයි මම විශ්වාස කරමි, නමුත් SQL සේවාදායකය නොවේ (ප්‍රශ්නය අසන).
dandev91

7

භාවිතා කරන තවත් ක්‍රමයක් CTE.

;WITH cte 
     AS (SELECT * 
         FROM   workrecord2 w 
         WHERE  EXISTS (SELECT 1 
                        FROM   employee e 
                        WHERE  employeerun = employeeno 
                               AND company = '1' 
                               AND date = '2013-05-06')) 
DELETE FROM cte 

සටහන: ඔබට අවශ්‍ය විට අපට JOINඇතුළත භාවිතා කළ නොහැක .CTEdelete


6

වරකට වගු දෙකකින් වාර්තා මකා දැමීම සඳහා මෙය සරල විමසුමකි.

DELETE table1.* ,
       table2.* 
FROM table1 
INNER JOIN table2 ON table1.id= table2.id where table1.id ='given_id'

3
මෙම ප්‍රශ්නය SQL සේවාදායකය සඳහා වේ. SQL සේවාදායකයේ එක් ප්‍රකාශයකින් ඔබට වගු දෙකකින් මකා දැමිය නොහැක. මගේ අවබෝධය නම් මෙය mysql සහ MS Access වලින් කළ හැකි බවයි.
ඩැරන් ග්‍රිෆිත්

6

මෙය උත්සාහ කරන්න, එය උදව් විය හැකිය

 DELETE WorkRecord2 
          FROM WorkRecord2 
    INNER JOIN Employee 
            ON EmployeeRun=EmployeeNo
         WHERE Company = '1' 
           AND Date = '2013-05-06';

7
පිළිගත් පිළිතුරට වඩා එය වෙනස් වන්නේ කෙසේද: stackoverflow.com/questions/16481379/… ?
පෙරනිමි පෙදෙස

3
මෙම පිළිතුර අන්වර්ථකරණයට වඩා පැහැදිලි වගු නම් කිරීම භාවිතා කරයි, අත්දැකීම් අඩු අයට කියවීමට / සිදුවෙමින් පවතින දේ දැන ගැනීමට එය පහසු කරයි.
ජෝෂුවා බර්න්ස්

1
Os ජෝෂුවා බර්න්ස්: තවමත් මගේ පිළිතුරේ අනුපිටපත .
hims056

4

මෙන්න මගේ SQL සේවාදායක අනුවාදය

DECLARE @ProfileId table(Id bigint)

DELETE FROM AspNetUsers
OUTPUT deleted.ProfileId INTO @ProfileId
WHERE Email = @email

DELETE FROM UserProfiles    
WHERE Id = (Select Id FROM @ProfileId)

4

ඔබ වෙනුවෙන් වගු නියම නැහැ Companyහා Date, ඔබ එම විසින් අදාල කරුණ නිවැරදි කිරීමට ඔබට අවශ්ය විය හැකිය.

භාවිතා කරන සම්මත SQL MERGE:

MERGE WorkRecord2 T
   USING Employee S
      ON T.EmployeeRun = S.EmployeeNo
         AND Company = '1'
         AND Date = '2013-05-06'
WHEN MATCHED THEN DELETE;

E ඩෙවාර්ට් වෙතින් ලැබෙන පිළිතුර ද සම්මත SQL අසම්පූර්ණ වුවත්, මේ හා සමාන විය යුතුය:

DELETE 
  FROM WorkRecord2
  WHERE EXISTS ( SELECT *
                   FROM Employee S
                  WHERE S.EmployeeNo = WorkRecord2.EmployeeRun
                        AND Company = '1'
                        AND Date = '2013-05-06' );

ඉහත සඳහන් කළ යුතු වැදගත් දෙය නම්, මකාදැමීම තනි වගුවක් ඉලක්ක කර ඇති බව පැහැදිලිය, දෙවන උදාහරණයේ දී බලාත්මක කළ පරිදි පරිමාණ අනුකාරකයක් අවශ්‍ය වේ.

මට නම් විවිධ හිමිකාර සින්ටැක්ස් පිළිතුරු කියවීමට හා තේරුම් ගැනීමට අපහසුය. Forfrans eilering විසින් පිළිතුරෙහි මනෝභාවය වඩාත් හොඳින් විස්තර කර ඇති බව මම අනුමාන කරමි, එනම් කේතය ලියන පුද්ගලයා අනිවාර්යයෙන්ම කේතය කියවන හා නඩත්තු කරන පුද්ගලයා ගැන සැලකිල්ලක් නොදක්වයි.


4

යාවත්කාලීන කිරීම හෝ යාවත්කාලීන කිරීම සඳහා මා දැනට භාවිතා කරන්නේ මෙන්න:

DELETE           w
FROM             WorkRecord2   w,
                 Employee      e
WHERE            w.EmployeeRun = e.EmployeeNo
             AND w.Company = '1' 
             AND w.Date = '2013-05-06'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.