Utworzenie zapytania - złączenie tabel bez potórzeń

0

1.jpg
Próbuję utworzyć zapytanie zwracające wszystkie wiersze bez powtórzeń z tabeli Pracownicy z warunkiem IdCechy =
Liczba wierszy w tabelach wyniesi > 500 tys. więc wydajność zapytania również jest ważna.
Bardzo proszę o pomoc.

1

Skoro IdPracownika to klucz główny i (IdPracownika,IdCechy) to klucz główny to zwykłe złaczenie da ci na pewno unikalny zbiór wyników.

select IdPracownika, Imie from Pracownicy inner join PracownicyCechy on Pracownicy.IdPracownika = PracownicyCechy.IdPracownika and PracownicyCechy.IdCechy = liczba
0

Dzięki @Shalom, ale zapomniałem dopisać, że bardzo zależy mi na zapytaniu, gdzie IdCechy będzie określany w warunku Where, a nie w złączeniu.

1

Zamień AND na WHERE.

0

Ok

 
SELECT Pracownicy.IdPracownika, Pracownicy.Imie, PracownicyCechy.IdCechy
	FROM Pracownicy INNER JOIN PracownicyCechy 
	ON Pracownicy.IdPracownika = PracownicyCechy.IdPracownika
	Where PracownicyCechy.IdCechy = 1

działa prawidłowo.

Jeszcze jedno pytanie.
W jaki sposób pozbyć się powtórzeń w kolumnie IdPracownika (uzyskać wszystkich pracowników bez powtórzeń) z zapytania:

 
SELECT Pracownicy.IdPracownika, Pracownicy.Imie, PracownicyCechy.IdCechy
	FROM Pracownicy INNER JOIN PracownicyCechy 
	ON Pracownicy.IdPracownika = PracownicyCechy.IdPracownika
1

Nie da się bo nie miałoby to sensu. Skoro pracownik może mieć więcej niż 1 cechę to siłą rzeczy nie możesz tego zrobić. No bo chcesz wynik w 3 kolumnach i jak chcesz tam pomieścić id, imie i 100 cech? Możesz pokazać jakby miał wyglądać wynik takiego zapytania?

0

W wyniku chcę zwrócić wszystkie wiersze bez powtórzeń z tabeli Pracownicy, gdzie

 Pracownicy.IdCechy =

Warunek konieczny dla zapytania:

  • wykorzystanie warunku do całego zapytania:
Where Pracownicy.IdCechy = 

Jeśli dany Pracownik ma przypisany wiele cech to w wyniku ma być zwracany jeden wiersz z tabeli Pracownicy z dowolną cechą np. pierwsza lub ostatnia

IdPracownika | Imie | IdCechy
1 | Jan | 1
1 | Jan | 2
1 | Jan | 5
2 | Tomasz | 1
3 | Szymon | 3
3 | Szymon | 6

Tabela wynikowa dla warunku:

Where Pracownicy.IdCechy = 1 OR Pracownicy.IdCechy = 3

IdPracownika | Imie | IdCechy
1 | Jan | 1
2 | Tomasz | 1
3 | Szymon | 3

0
SELECT * FROM pracownicy WHERE IdPracownika IN(SELECT idPracownika FROM PracownicyCechy WHERE idCechy IN(3,6))

albo

SELECT * FROM pracownicy p JOIN (SELECT idPracownika, Min(IdCechy) IdCechy FROM PracownicyCechy WHERE idCechy IN(3,6) GROUP BY 1) x ON x.IdPracownika=p.IdPracownika

1 użytkowników online, w tym zalogowanych: 0, gości: 1