van aki ert itt adatbazisokhoz?
correlated subquerry hogy mukodik?
van egy ilyen peldam:
DROP TABLE IF EXISTS jogosultsagok;
DROP TABLE IF EXISTS programok;
DROP TABLE IF EXISTS felhasznalok;
CREATE TABLE programok(
program_id INT PRIMARY KEY,
program_nev VARCHAR(40) UNIQUE NOT NULL
)CHARSET = latin2;
CREATE TABLE felhasznalok(
user_id INT PRIMARY KEY,
user_nev VARCHAR(30) UNIQUE NOT NULL
)CHARSET = latin2;
CREATE TABLE jogosultsagok(
program_id INT NOT NULL,
user_id INT NOT NULL,
allapot VARCHAR(1) NOT NULL COMMENT 'I: inaktiv A: aktiv'
)COMMENT 'programok <--> felhasznalok kapcsolotabla';
INSERT INTO programok(program_id,program_nev) VALUES
(101,'p_101'),
(102,'p_102'),
(103,'p_103'),
(104,'p_104');
INSERT INTO felhasznalok(user_id,user_nev) VALUES
(1,'U_1'),
(2,'U_2'),
(3,'U_3'),
(4,'U_4'),
(5,'U_5');
INSERT INTO jogosultsagok(program_id,user_id,allapot) VALUES
(101,1,'A'),
(101,2,'I'),
(101,3,'I'),
(101,4,'A'),
(102,3,'A'),
(102,4,'A'),
(104,2,'A'),
(104,3,'I');
1.
# Azon programok azonosítóját akarjuk látni, amelyeknek nincs inaktív
# felhasználója, de van legalább egy felhasználójuk.
# Várt eredmény:
# +------------+
# | program_id |
# +------------+
# | 102 |
# +------------+
# A.) Oldjuk meg a feladatot EXISTS művelet és allekérdezés segítségével.
select distinct program_id from jogosultsagok as tkulso
where not exists (select program_id from jogosultsagok as tbelso
where tbelso.program_id=tkulso.program_id and allapot like'I');
valaki el tudna magyarazni miert van szukseg erre a tbelso meg tkulso alarcokra?