Pomoc przy zadaniu - znaleźć 2 sposób

0

Cześć ! :) Mam takie zadanie:
Podac nazwisko, stanowisko pracowników, którzy w nazwie stanow ´ iska maj ˛a litery ZE oraz
w nazwie miasta litery AL (dwa sposoby).
1 sposób juz mam, napisalem go tak:

 select nazwisko, nazwa
from pracownicy, stanowiska
where pracownicy.idstanowiska = stanowiska.idstanowiska
and nazwa like '%ze%'
and miasto like '%al%';

Niestety nie wiem, jak mialby wygladac 2 sposób :)

Z góry dziekuje za pomoc i pozdrawiam
wodeczka94 :)

0

Mógłbyś mi jakoś wytłumaczyć, jak działa ta funkcja? Bo nie do końca rozumiem :)

0

Przecież tam jest opis:

The first syntax LOCATE(substr,str) returns the position of the first occurrence of substring substr in string str

I są nawet przykłady:

SELECT LOCATE('bar', 'foobarbar'); -> 4
SELECT LOCATE('xbar', 'foobar'); -> 0

Chyba nie spróbujesz mi wmówić, że nawet na logikę jakiejś prawidłowości tutaj nie dostrzegasz.

0

No jest napisane, ze zwraca pozycje, a mi musi zwracac nazwisko i stanowiska pracownika ktory ma w swoim iescie zamieszkania litery AL a w stanowisku ZE :) I nie wiem jak tego użyc :P

0

locate zwraca pozycję danego podciągu w ciągu znaków (np. szukając world w hello world zwróci 6) bądź 0 jeśli ten podciąg nie występuje.
To teraz pytanie za 10 milionów punktów - jak za pomocą tej funkcji sprawdzić czy dany podciąg znaków występuje w ciągu? Oraz w jaki sposób lokalizowanie podciągu jest związane z Twoim zadaniem?

0
 
SELECT nazwisko,nazwa
FROM pracownicy,stanowiska
WHERE exists
            (SELECt *
            FROM stanowiska
            WHERE pracownicy.idstanowiska=stanowiska.idstanowiska
            AND nazwa like '%ze%'
            and miasto like '%al%');
0

@wodeczka94 jak rozumiem to select z Twojego pierwszego posta zwraca wynik, a ty musisz to zrobić drugim sposobem tak? Jeżeli dobrze zrozumiałem to mam kilka pomysłów.

  • Jeśli chodzi wyłącznie o zmianę składni to zamiast dawać dwie tabele do from i złączenie w where możesz użyć składni z JOIN.

  • Jeśli chodzi o bardziej skomplikowany ale mniej wydajny sposób to możesz stworzyć obiekt (np procedurę), gdzie zastosujesz kursor, pętlę i tabelę, do której wpiszesz dane z kursora, a na końcu select z nowej tabeli - tragedia na uzyskanie tego samego ale inny sposób jest

  • Możesz spróbować z execute imediate

  • Możesz spróbować z podzapytaniem z użyciem with

  • Możesz tak jak Ci podał @Patryk27 locate

  • Możesz zrobić podzapytanie z funkcją minus - choć czasami to nie działa zbyt dobrze ale na twoim prostym przykładzie powinno działać

Wszystko co opisałem spokojnie znajdziesz na necie wszystko zależy czego potrzebujesz

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