![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 301 Pomógł: 25 Dołączył: 15.07.2007 Skąd: Olsztyn Ostrzeżenie: (0%) ![]() ![]() |
Witam, nie wiem jak zrobić takie zapytanie (czy ono jest w ogóle możliwe) mianowicie:
Mam sobie 2 tabele: 1: Kod OtherID // mainID // inne... 1 // 2 // inne 2 // 5 // inne 3 // 2 // inne 4 // 6 // inne 5 // 6 // inne 7 // 2 // inne itp... Pole mainID może się powtarzać Następnie mam tabele nr 2: Kod OtherID // inne... 1 // inne 3 // inne 4 // inne 5 // inne ... itp Teraz jako dane wejściowe mam jedno MainID i chciałbym jednym zapytaniem: - pobrać wszystkie otherID z tabeli nr 1 których mainID zgadza się temu danemu - usunąć wszystkie wpisy z tabeli nr2 ktorych otherID jest równe tym pobranym z tabeli nr1 Czy da się zrobić to jednym zapytaniem? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 781 Pomógł: 256 Dołączył: 29.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 301 Pomógł: 25 Dołączył: 15.07.2007 Skąd: Olsztyn Ostrzeżenie: (0%) ![]() ![]() |
Dzięki podążając za rzuconym mi tropem doszedłem do takiej wiadomości:
Cytat(Martin @ July 4 2008 12:57pm on http://dev.mysql.com) I found a fast way to delete a small subset of rows in a very big table (hundreds of thousands or millions): You will need the to be deleted IDs in a temporary table which you might already have and you want to delete only those IDs: A naive way would be to do DELETE FROM LargeTable WHERE ID IN (SELECT ID FROM TemporarySmallTable); Given that LargeTable contains maybe 300,000-500,000 and TemporarySmallTable ca 3,000-6,000 rows, this can take ca 300ms. Instead, try this: DELETE FROM LargeTable USING LargeTable INNER JOIN TemporarySmallTable ON LargeTable.ID = TemporarySmallTable.ID; This DELETE takes on the same database 1ms. The trick is, that INNER JOIN will 'shrink' the LargeTable down to the size of the TemporarySmallTable and the delete will operate on that smaller set only, since USING will reference to the joined table. Tuta pisze w skócie, że zastosowanie INNER JOIN jest o wiele szybsze (jeżeli dobrze zrozumiałem) będę podążał za tym wzorcem chociaż nie mam zamiaru jak na razie sprawdzać jego wydajności (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Prawda. Dziwie się że nikt nie wykazał się napsianie DELETE'a z JOINEM :]
No ale cóż bywa xp P.S. jako że wkleiłeś przykład to wyszedłem z założenia że nie trzeba już psiać Tobie tego zapytania ;] |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 20:29 |