Używam SQL za pośrednictwem narzędzia API, które obsługuje tylko podstawowy SQL, a nie żadne specjalne funkcje SQL obsługiwane przez SQL Server / Oracle / MySQL itp.

Mam SQL, który zwraca dane takie jak:

swql_result

Czy jest możliwe wykonanie tego zapytania SQL jako zapytania podrzędnego i ściągnięcia wyniku, który wyglądałby następująco:

expected_final_result

Jeśli mam col_2 = 'str2' AND col_3 = 'act', otrzymam jeden wiersz z pary zielonych rzędów.

Ale w moim wyniku chcę, aby wiersz z zielonej pary miał col_2 = 'str_1'.

Wiem, że to dziwne, ale chcę zobaczyć, czy to możliwe. Nie mogłem wymyślić żadnego sposobu, aby to zrobić. Próbowałem umieścić SQL, który pobiera pierwszy wynik w SELECT t1.col_1, t1.col_2, t1.col_3 FROM (<SQL_1>) t1 WHERE... i jego wariantach, ale nie mogłem zbliżyć się do oczekiwanego rozwiązania.

Pary zielonych wierszy zawsze będą miały ten sam ciąg w kol_1.

sql
0
300 12 marzec 2020, 00:45

2 odpowiedzi

Najlepsza odpowiedź

Podejrzewam, że exists robi to, co chcesz. To jest standardowy sql, który obsługuje wszystkie relacyjne bazy danych, o których myślę:

select t.*
from mytable t
where 
    col2 = 'str_1'
    and exists (
        select 1 
        from mytable t1 
        where t1.col1 = t.col1 and t1.col2 = 'str_2' and t1.col3 = 'act'
    )
1
GMB 11 marzec 2020, 21:59

Komentarze są na miejscu: nie wysyłaj zdjęć, faksów ani TELEKSÓW swoich danych. Opublikuj coś, co można wykonać w bazie danych. Skorzystaj z nowoczesnej technologii, takiej jak DB-Fiddle, i podziel się swoim problemem.

Jeśli chodzi o twoje pytanie:
wygląda na to, że chcesz wybrać określone grupy / zestawy danych za pomocą filtru COL_3 = 'act', a następnie zwrócić rekordy z tych grup / zestawów, które mają COL_2 = 'str_1'.

Jest to łatwe w przypadku standardowego SQL:

WITH selector
(col_1, col_4)
    as (SELECT 
            col_1, col_4
        FROM
            data 
        WHERE col_3 = 'act')
select
      d.col_1
    , d.col_2
    , d.col_3
    , d.col_4
from 
    data d
    inner join selector s
      on (d.col_1, d.col_4)
       = (s.col_1, s.col_4)
    and d.col_2 = 'str_1'
;

Wypróbuj tutaj.

1
Lars Br. 11 marzec 2020, 22:34