Łączenie dwóch tabel

Łączenie dwóch tabel
LU
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 8 lat
  • Postów:20
0

Witajcie,
Stanąłem przed pewnym problemem który zapewne da się jakoś rozwiązać tylko nie bardzo mam pomysł jak. Do tej pory miałem w swoim systemie jedną tabelę z której zaciągałem dane i po tych danych robiłem filtrowanie. Teraz po modyfikacji doszła mi druga tabela. Może pokażę jak to wygląda na przykładzie. Struktura tabel jest prosta. Tabela pierwsza którą już mam prezentuje się następująco:
ID DATA_1 DATA_1 DATA_3 ........
1
2
...
...
...
100
101
102

ID to klucz główny, kolumny DATA_x to kolumny w których znajdują się dane. Teraz doszła mi druga tabela która zawiera w sobie ID z pierwszej jako klucz obcy. Oczywiście ponieważ druga tabela doszła mi później, będzie miała mniejszy zbiór danych i prezentuje się następująco:
ID ID_TABLE_1 DATA_1 DATA_1 DATA_3 ........
1 100
2 101
3 102

Wszystkich danych które są poniżej ID 100 w pierwszej tabeli nie mam w drugiej. I teraz mam problem ponieważ gdy wykonuję zapytanie:

Kopiuj
SELECT TOP 20 * FROM TABLE_1 T1
LEFT JOIN TABLE_2 T2 ON T1.ID = T2.ID_TABLE_1
WHERE
T2.DATA_1 != 'wartość' AND T2.DATA_2 != 'wartość'

zwracane są wyłącznie dane które są częścią wspólną obu tabel natomiast te które są tylko w tabeli pierwszej a nie mają połączenia z drugą, są po prostu pomijane. Jeżeli usunę klauzulę WHERE jest ok, jak tylko dodam tą klauzulę już ok nie jest. Szczerze to nie mam pomysłu jak to ugryźć. Pomożecie?

edytowany 1x, ostatnio: bogdans
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:7 miesięcy
  • Postów:6610
0
Kopiuj
SELECT TOP 20 * FROM TABLE_1 T1
LEFT JOIN TABLE_2 T2 ON T1.ID = T2.ID_TABLE_1 AND T2.DATA_1 != 'wartość' AND T2.DATA_2 != 'wartość'

Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
ŁF
Moderator
  • Rejestracja:ponad 22 lata
  • Ostatnio:8 dni
1

TABLE_1, DATA_1... Ty tak serio? Za pół roku nie będziesz mieć pojęcia, co tam trzymasz.


LU
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 8 lat
  • Postów:20
0
abrakadaber napisał(a):
Kopiuj
SELECT TOP 20 * FROM TABLE_1 T1
LEFT JOIN TABLE_2 T2 ON T1.ID = T2.ID_TABLE_1 AND T2.DATA_1 != 'wartość' AND T2.DATA_2 != 'wartość'

Super, dzięki wielkie, wszystko działa :)

ŁF napisał(a):

TABLE_1, DATA_1... Ty tak serio? Za pół roku nie będziesz mieć pojęcia, co tam trzymasz.

Żartujesz? Oczywiście że nie. To był tylko przykład bo całe zapytanie jest dużo dużo dłuższe bo jest tam jeszcze choćby szereg warunków filtrujących. Napisałem jedynie prosty przykład żeby pokazać problem z którym się zmagam a reszta kodu mogła by tylko zaciemniać całość.

edytowany 1x, ostatnio: lukpio
LU
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 8 lat
  • Postów:20
0

Cześć,
Chciałbym ponowić temat. Dałbym sobie głowę uciąć że sposób który podał @abrakadaber działał. Ale dziś zacząłem sobie testować i patrzę że mimo że mam w zapytaniu aby nie pobierał mi wierszy z konkretną wartością to ono mi je cały czas pobiera. Nawet zapytanie wykonane na bazie, nie z poziomu aplikacji nie działa i zwraca wiersze których zwrócić nie powinien pomimo tego że w zapytanie ma wyraźnie wskazane że ma pobierać wszystko to gdzie wartość w danej kolumnie jest różne wartości_1 i różne od wartość_2. Nie wiem jak to mogło przestać działać.

Wklejam poniżej swoje zapytania. Tak ono dokładnie wygląda:

Kopiuj
SELECT Z.ID_ZAP, Z.DATA_1, Z_DATA_2 .....
FROM ZAPYTANIA Z
LEFT JOIN STATUSY S ON Z.ID_ZAP = S.ID_ZAP
AND S.STATUS != '' AND S.STATUS != 'Zakończono'
ORDER BY ID_ZAP DESC
 

Z.DATA_1 ... to są dane, nie wypisywałem ich żeby nie zaśmiecać zapytania bo tych danych jest ponad 100.

I to zapytanie pomimo tego że wyraźnie wskazuję że ma nie pobierać rekordów gdzie status jest pusty lub status ma wartość Zakończono to on i tak je pobiera.

edytowany 2x, ostatnio: lukpio
tajny_agent
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad rok
  • Postów:1340
0

A to przypadkiem nie powinien być INNER JOIN?


"I love C++. It's the best language in the world right now for me to write the code that i need and want to write"
~ Herb Sutter
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:7 miesięcy
  • Postów:6610
0

jeśli status jest null to warunek status != '' jest niespełniony. Bez konkretnych danych i zapytania nic więcej nie można powiedzieć


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
NE
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 8 lat
  • Postów:39
0

Dodaj jeszcze warunek że status nie jest null:

Kopiuj
SELECT Z.ID_ZAP, Z.DATA_1, Z_DATA_2 .....
FROM ZAPYTANIA Z
LEFT JOIN STATUSY S ON Z.ID_ZAP = S.ID_ZAP
AND S.STATUS != '' AND S.STATUS != 'Zakończono' and S.STATUS IS NOT NULL
ORDER BY ID_ZAP DESC
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)