我将概括/专业化表Zadavatel(包含主键)用作表Sukromna_osoba或Firma(均包含指向Zadavatel的外键)。
如果两个条件都成立,那么如果Sukromna_osoba.meno ='string'存在,那么我需要选择Sukromna_osoba表;如果Firma.nazov_firmy ='string'存在,我需要选择Firma表。我还需要将其选中。

CREATE TABLE Zadavatel (
id_zadavatela  INTEGER,
adresa VARCHAR(25)
);

CREATE TABLE Sukromna_osoba (
id_sukromnej_osoby  INTEGER,
meno VARCHAR(20),
mobil  INTEGER,
email VARCHAR(20)
);

CREATE TABLE Firma (
id_firmy  INTEGER,
nazov_firmy VARCHAR(20),
ico  INTEGER,
bankove_spojenie INTEGER
);

id_zadavatela是主键,而id_sukromnej_osoby和id_firmy是指向id_zadavatela的外键。

我尝试过这样的事情:
SELECT PR.id_projektu, PR.popis, ZAD.id_zadavatela, FI.nazov_firmy
    FROM Projekt PR JOIN Zamestnanec ZAM ON PR.manazer = ZAM.osobne_cislo
    JOIN Zadavatel ZAD ON PR.zadavatel = ZAD.id_zadavatela
    JOIN Firma FI ON ZAD.id_zadavatela = FI.id_firmy
WHERE ZAM.meno = 'Jan Novák' OR (
    SELECT PR1.id_projektu, PR1.popis, ZAD1.id_zadavatela, SO1.meno
    FROM Projekt PR1 JOIN Zamestnanec ZAM1 ON PR1.manazer = ZAM1.osobne_cislo
    JOIN Zadavatel ZAD1 ON PR1.zadavatel = ZAD1.id_zadavatela
    JOIN Sukromna_osoba SO1 ON ZAD1.id_zadavatela = SO1.id_sukromnej_osoby
    WHERE ZAM1.meno = 'Jan Novák'
)

最佳答案

由于您不知道这是一个公司还是一个人,因此可以在两个上面都使用左外部联接,如下所示:

SELECT PR.id_projektu, PR.popis, ZAD.id_zadavatela, FI.nazov_firmy, SO.meno
FROM Projekt PR
JOIN Zamestnanec ZAM ON PR.manazer = ZAM.osobne_cislo
JOIN Zadavatel ZAD ON PR.zadavatel = ZAD.id_zadavatela
LEFT OUTER JOIN Firma FI ON ZAD.id_zadavatela = FI.id_firmy
LEFT OUTER JOIN Sukromna_osoba SO ON ZAD.id_zadavatela = SO.id_sukromnej_osoby
WHERE ZAM.meno = 'Jan Novák'

两个结果列nazov_firmymeno之一将是NULL

07-24 18:18
查看更多