SQL - zwrócenie count rekordów z nullem w wybranej kolumne

0

Hej,

Mam dwie tabele, załóżmy że

  1. person (id, name, surname, age, country)
  2. job (id, name, salary, city, person_id) gdzie person_id to FK do Person

To co potrzebuje zrobić to napisać takie zapytanie które sprawdzi czy w tabeli person istnieją rekordy gdzie name, surname oraz age jest NULL, i też czy w tabeli job istnieją rekordy gdzie name, salary, city jest NULL. Ma to być w postaci COUNT(*) na tych tabelach, które zwróci 0 jeśli nie istnieją żadne rekordy mające nulla w tych kolumnach co podałem, lub więcej jeśli oczywiście jest taki rekord.

Nie ma tu żadnych warunków uzależniających jedno pole od drugiego, muszę po prostu sprawdzić czy jest jakiś rekord z nullem i tyle. Sęk w tym, że zrobiłem sobie dwie proste sqlki które to robią:

SELECT COUNT(*) 
FROM person p WHERE
p.name is null or
p.surname is null or,
p.age is null

SELECT COUNT(*) 
FROM job j WHERE
j.name is null or
j.salary is null or
j.city is null

Ale musi to być wykonane jednym zapytaniem. Kiedy próbuje to scalić i joinować wychodzą mi jakieś bzdury i duplikaty, stąd prośba o pomoc.
Dodam może jeśli to istotne, że korzystam z postgreSQL.

1

Może coś takiego?

select
(select 123) as nullperson,
(select 456) as nulljob
0

Użyj sobie UNION.

https://www.postgresqltutorial.com/postgresql-union/

"Summary: in this tutorial, you will learn how to use PostgreSQL UNION operator to combine result sets of multiple queries into a single result."

1

możesz to zrobić na dwa sposoby, przy czym pierwszy będzie szybszy

SELECT SUM(lb) FROM 
(
    SELECT COUNT(*)  as lb
        FROM person p 
        WHERE   p.name is null or  
                        p.surname is null or 
                        p.age is null
    UNION ALL
    SELECT COUNT(*) as lb
        FROM job j 
        WHERE   j.name is null or
                        j.salary is null or
                        j.city is null
) T0 
SELECT COUNT(*) 
FROM person p 
LEFT JOIN job j ON p.id = j.person_id 
WHERE
    (p.name is null or
     p.surname is null or
     p.age is null
    )
   OR 
   (  j.person_id  IS NOT NULL AND 
          (j.name is null or
           j.salary is null or
           j.city is null)
   )

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