1. Ta strona wykorzystuje ciasteczka (cookies) w celu: utrzymania sesji zalogowanego Użytkownika, gromadzenia informacji związanych z korzystaniem z serwisu, ułatwienia Użytkownikom korzystania z niego, dopasowania treści wyświetlanych Użytkownikowi oraz tworzenia statystyk oglądalności czy efektywności publikowanych reklam.Użytkownik ma możliwość skonfigurowania ustawień cookies za pomocą ustawień swojej przeglądarki internetowej. Użytkownik wyraża zgodę na używanie i wykorzystywanie cookies oraz ma możliwość wyłączenia cookies za pomocą ustawień swojej przeglądarki internetowej. Dowiedz się więcej.
  2. Rejestracja na forum zamknięta, dostęp tylko przez zaproszenia. Gdzie znajdę zaproszenia?

  3. Zamknij zawiadomienie

Manipulowanie w SQL

Temat na forum 'OFF SOFTWARE' rozpoczęty przez SADUS, Kwiecień 21, 2016.

  1. SADUS

    SADUS Przylepa^^
    Konsul - Pretor Podporucznik

    Dołączył:
    Grudzień 15, 2006
    Posty:
    3902
    Polubienia:
    18
    Siema, od jakiegos czasu zmagam sie z napisaniem skryptu wywalajacego z bazy danych troche informacji. Chodzi o pewna grupe produktow, posiada ona wiele rzeczy (jedna z grup ma ponad 200 rzeczy) niestety przez okres 2-3 lat 8 szt z tych rzeczy zostalo uzytych i znajduja sie w innej tabeli. Skasowanie calej grupy spowoduje niespujnosc bazy danych. W takim przypadku musze wywalic tylko te nie uzywane a te uzyte zmienic z aktywnych na nieaktywne. I tutaj pojawia sie problem. Wszystkie info jakie znalazlem tlumacza jak wywalac cale tabele, wpisy pojedyncze ale nic na temat kasowania wszystkiego poza kilkoma wpisami.
    Wyszukalem ktore dokladnie zostaly uzyte:
    Kod:
    select * from payment
    where businesscode = 'XX'
    and itemid in (
    Select i.itemID
    from item as i, itemcategory as ic
    where i.itemcategoryId = ic.itemcategoryId
    and ic.shortdesc ='Jessica Colours'
    and ic.businesscode ='XX'
    and suppliername ='Jessica')
    Tutaj server oddal info o 8miu rzeczach uzytych. Jak teraz zrobic by te 8 rzeczy zostalo a pozostale ponad 200 skasowalo?
    Takich grup (kategorii) jest kilka ale tam juz sobie poradze. Oczywiscie kod firmy zostal przeze mnie ocenzurowany ;)

    [​IMG]
     
  2. cyberxx

    cyberxx Pasożyt

    Dołączył:
    Sierpień 19, 2007
    Posty:
    5
    Polubienia:
    1
    Siemano,
    O ile dobrze zrozumiałem, to chcesz usunąć prawie wszystkie rekordy z payment, a pozostałe zmienić.
    W takim razie zamieniasz selecta na delete i dajesz przeciwny warunek (w selekcie wypisałeś te 8, teraz chcesz wszystkie, poza tymi ośmioma):
    Kod:
    DELETE from payment
    where businesscode = 'XX'
    and itemid NOT in (
    Select i.itemID
    from item as i, itemcategory as ic
    where i.itemcategoryId = ic.itemcategoryId
    and ic.shortdesc ='Jessica Colours'
    and ic.businesscode ='XX'
    and suppliername ='Jessica')
    
    W tabeli pozostało tylko 8 rekordów, więc możesz spokojnie puścić UPDATE, nawet bez warunków.
    W razie czego polecam zrobić kopię samej tabeli (jak rozumiem jest rzadko zmieniana), a zapytanie puścić w transakcji, o ile to możliwe.
     
    SADUS lubi to.
  3. SADUS

    SADUS Przylepa^^
    Konsul - Pretor Podporucznik

    Dołączył:
    Grudzień 15, 2006
    Posty:
    3902
    Polubienia:
    18
    Ha, jak przeczytałem do zobaczyłem jaki prosty skrypt :p
    Albo muszę się poduczyć albo praktykować, sam nie wiem.
    Dzięki bardzo za pomoc.