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?

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:
    3882
    Polubienia:
    8
    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 Sponsor

    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:
    3882
    Polubienia:
    8
    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.