Update dla wielu kolumn Access

Update dla wielu kolumn Access
JA
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 2 lata
  • Postów:127
0

Cześć,

mam takie relacje oraz tabele:

Screenshot_14.png

Kwestia idzie o update tabeli tblDescription na podstawie danych z Excela (dodalem tabele ExcelTempTable), które nie mają unikalnego numeru.
Tabela z Excela ma takie same kolumny jak tblDescription plus dodatkowo osobę do każdego rekordu przypisaną (Person z tabeli tblPeople)

Jak to zrobić?
Dane w excelu mogą być zaktualizowane, usuniete, albo dodane nowe, np. w wierwszu 2 zmini sie rozmiar nosa z Big na Medium.

Jakis gosc mi podpowiedział żebym uzyl do updated'u i dodania nowego rekordu takiego sqlk'a:

Kopiuj
update tblDescription as t1 left join ExcelTempTable as t2 on 
    ti.[eyecolor] = t2.[eyecolor] and 
    t1.[hairstyle] = t2.[hairstyle] and 
    t1.[noseshape] = t2.[noseshape] 
set 
    t1.[eyecolor] = t2.[eyecolor], 
    t1.[hairstyle] = t2.[hairstyle], 
    t1.[noseshape] =  t2.[noseshape];

Aby usunac wiersz z tabeli tblDescription:

Kopiuj
delete t1.* from tblDescription as t1 
    where t1.[eyecolor] & t1.[hairstyle] & t1.[noseshape] 
       not in 
    (select [eyecolor] & [hairstyle] & [noseshape] from ExcelTempTable);

ale jak zmienie coś w tabeli ExcelTempTable np. ShapeNose z Medium na Big to wszystkie wartości mi wymazuje w tabeli tblDescription w danym rekordzie uzywajac pierwszego sqlka (update). Dlaczego?
Jak to poprawić?

W załączeniu baza danych przykładowa.

Proszę pomóżcie,
Jacek

edytowany 3x, ostatnio: jaryszek
BlackBad
  • Rejestracja:ponad 8 lat
  • Ostatnio:3 miesiące
  • Postów:454
1

Coś pokręciłeś, czy tam pokręcił Twój kolega ten kod nie ma szans zadziałać bo łączysz 2 tabele po wartościach które dopiero chcesz zmienić (inaczej mówiąc chcesz znaleźć wspólny rekord do zmiany na podstawie danych które dopiero chcesz zmienić )

Musisz wziąć pod uwagę pole Person ... ale tu się pojawiają schody bo w Excelu masz Podane pole Person - np Paul 2 x z różnymi wartościami innych pól - więc jak zmienisz w Excelu wartość nosa z big na medium to update zrobi Ci dla obu rekordów .... w ogóle nie rozumiem założenia że 1 osoba może mieć wiele opisów ?

Tak czy inaczej musisz kombinować z czymś takim:

Kopiuj
UPDATE (exceltemptable
        INNER JOIN tblpeople
                ON exceltemptable.person = tblpeople.name)
       INNER JOIN (tbldescription
                   INNER JOIN tbldescriptionpeople
                           ON tbldescription.descriptionid =
                              tbldescriptionpeople.descriptionid)
               ON tblpeople.personid = tbldescriptionpeople.peopleid
SET    tbldescription.eyecolor = [exceltemptable].[eyecolor],
       tbldescription.hairstyle = [exceltemptable].[hairstyle],
       tbldescription.noseshape = [exceltemptable].[noseshape];  
JA
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 2 lata
  • Postów:127
0

BlackRed dzięki. Właśnie zastanawiam się czy w ogóle jest to możliwe.
Może najpierw powininien wywalić wszystko z tabeli tblDescription i dopiero na końcu pokombinować z połączeniem to do odpowiedniej Person.

w ogóle nie rozumiem założenia że 1 osoba może mieć wiele opisów ?

to jest przykład tylko, ale w modelu biznesowym mam właśnie taką sytuację bo tą osobą jest customer i ten customer może mieć wiele różnych kombinacji z tabeliDescription.

Twój sql nie działa.

Dodam jeszcze, że tabela ExcelTableTemp jest tabelą narastającą, ciąglę się zmieniającą. Rekordy mogą zostać wycięte, dodane nowe, mogą być dodane nowe kombinacje.

edit:
Kroki powinny byc takiej wg mnie:

  1. Sprawdź tabalę tblDescription co jest nowe, czego nie ma to dodaj to jako całościowe rekordy, a co jest zbędne i skasuj to.
  2. Po aktualizacji tabeli tblDescription uzyj update'a dla konkretnych osób i dopisz te wiersze do tabeli tbldescriptionpeople ktorych nie ma do danej osoby, skasuj te które sa zbedne jako całosciowe rekordy (nie mam jednego wyrozniajace pola).

Proszę o pomoc w napisaniu sql'a lub moze macie jakieś inne pomysły?
W powyzszy sposob to tak naprawde "czyszcze" i tworze od nowa tbldescriptionpeople oraz tbldescription, nie wiem czy to dobre podejscie...
Jacek

edytowany 5x, ostatnio: jaryszek
JA
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 2 lata
  • Postów:127
0

Hej,

jest tam kto?

BlackBad
  • Rejestracja:ponad 8 lat
  • Ostatnio:3 miesiące
  • Postów:454
0

W powyzszy sposob to tak naprawde "czyszcze" i tworze od nowa tbldescriptionpeople oraz tbldescription, nie wiem czy to dobre podejscie...

No więc właśnie ... zacznij może od tego co masz na wejściu, co chcesz na wyjściu. Opisz jakoś logikę biznesową - do czego to ma służyć, kto wprowadza dane, a kto i po co je później pobiera etc.
Z Twojego ostatniego postu wynika, że tabela exceltemptable jest podstawą do budowy wszelkich innych tabel ? :| To tak jakby wszystkie dane z tabel usunąć i wypełnić na nowo ? Tylko po co ?

Co do tego kodu nie wiem co tam u ciebie nie działa u mnie działa ;) Tylko że jak masz 2 różne osoby z różnymi danymi w excel - podpięte to tego same description to Ci wychodzi brak logiki w tym całym założeniu.

JA
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 2 lata
  • Postów:127
0

To jest tylko maly przyklad , moj caly model jest olbrzymi a to jest maultka galaź z tego.

Z tabeli excelowej tylko czyscimy jedna tabele - tblDescription oraz uaktualniamy tabele descriptionpeople table.
Tak wyglada, że dane sa dostarczane recznie przez pana, ktory wymysla konfiguracje rozne.

Osobę moze byc customer, moze byc jakas aplikacja.
Do tej aplikacji mogę miec wiele konfiguracji dlatego mamy tutaj wiele do wielu.
Zamiast osoby i description mozesz dac tam studentow i konfiguracje klas lub wykladow albo co chcesz.

Przetestowalem jeszcze razi rzeczywiscie dziala. Ale nie do konca tak jak powinno.

Rozwiazalem to w inny sposob:

  1. Dodaje rekordy ktorych nie mam w tblDescription a mam w ExcelTempTable
    2.Usuwam te rekordy ktorych nie mam w ExcelTempTable a mam w tblDescription
  2. Uruchamiam kwarendy ktore updatują tabele descriptionpeople.

Jacek

BlackBad
No i git - jeśli nie wchodzić w całościowy model bo to wycinek większego rozwiązania - to można to rozwiązać i tak. Good for you!
JA
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 2 lata
  • Postów:127
0

Dziękuję BlackBed. Swoją drogą jak się nauczyć pisać takie skomplikowane sqlki jak napisałeś ? :)

Jacek

Marcin.Miga
Skomplikowane? Toć to podstawy...
BlackBad
:) Ale nazwy tabel nie "wielbłądem" napisane i parę połączeń i króciutki kod od razu wychodzi na "magiczny" hehe ;)
BlackBad
  • Rejestracja:ponad 8 lat
  • Ostatnio:3 miesiące
  • Postów:454
1

Szczerze mówiąc ten krotki update jest bardzo prosty. Wydaje Ci się skomplikowany bo są użyte 4 powiązane ze sobą tabele i tylko tyle.

A uczysz się przez praktykę - tj. masz problem i potrzeby go rozwiązania to zaczynasz szukać i kombinować, czasem jak już staniesz w miejscu to pojawiasz się tu :D czy na innym forum tematycznym.
(co prawda ja mgr mam z ZSRBD ale pracowałem długo bardziej jako analityk biznesowy i key user od systemu ERP także praktycznie wszytsko wyleciało - a z czasem na nowo sie człowiek uczy i przypomina ;) ).
Jak chcesz zgłębiać wiedzę to szukaj różnych stron z zadaniami do testów choćby np.: https://granicekodu.pl/category/tsql/podstawowy-t-sql/
A tu masz ciekawą propozycję gdzie bardzo przystępnym językiem są opisane podstawy: https://www.sqlpedia.pl/kurs-sql/

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)