Portál AbcLinuxu, 8. května 2025 05:11
jmeno | banka | vklad --------------------- jan KB 100 jan CSOB 200 jan CS 100 tonda CSOB 100 tonda CS 100 pepa KB 300 jiri KB 200 jiri CSOB 100Chtěl bych docílit toho, aby každý člověk měl v ČS uloženo 100 Kč. Umím vypsat, kteří lidé nemají u ČS nic:
select distinct jmeno from moje_tabulka
where jmeno not in (select jmeno from moje_tabulka where banka <> 'CS')
Výsledkem by měl být pepa, jiriAle už nevím, jak toto použít pro INSERT. Finální tabulka by měla vypadat takto:
jmeno | banka | vklad --------------------- jan KB 100 jan CSOB 200 jan CS 100 tonda CSOB 100 tonda CS 100 pepa KB 300 pepa CS 100 jiri KB 200 jiri CSOB 100 jiri CS 100Děkuji za rady. JR
Řešení dotazu:
banka = 'CS'
v subselecte
ak mas otestovany select, potom staci pouzit insert-select syntax:
INSERT INTO moje_tabulka (jmeno, banka, vklad) SELECT DISTINCT jmeno, 'CS', 100 FROM moje_tabulka WHERE jmeno NOT IN (SELECT jmeno FROM moje_tabulka WHERE banka = 'CS') ;
Odhlédnu od toho, že to schéma je špatně navržené, a budu to brát jako minimalistický příklad pro potřeby dotazu.
Soubor vklady.sql
:
CREATE TABLE vklad ( jmeno VARCHAR(20), banka VARCHAR(10), vklad INTEGER ); INSERT INTO vklad (jmeno, banka, vklad) VALUES ('jan', 'KB', 100); INSERT INTO vklad (jmeno, banka, vklad) VALUES ('jan', 'CSOB', 200); INSERT INTO vklad (jmeno, banka, vklad) VALUES ('jan', 'CS', 100); INSERT INTO vklad (jmeno, banka, vklad) VALUES ('tonda', 'CSOB', 100); INSERT INTO vklad (jmeno, banka, vklad) VALUES ('tonda', 'CS', 100); INSERT INTO vklad (jmeno, banka, vklad) VALUES ('pepa', 'KB', 300); INSERT INTO vklad (jmeno, banka, vklad) VALUES ('jiri', 'KB', 200); INSERT INTO vklad (jmeno, banka, vklad) VALUES ('jiri', 'CSOB', 100); INSERT INTO vklad (jmeno, banka, vklad) SELECT jmeno, 'CS' AS banka, 100 AS vklad FROM ( SELECT jmeno FROM vklad EXCEPT SELECT jmeno FROM vklad WHERE banka = 'CS' );
Výsledek:
$ cat vklady.sql | relpipe-in-sql --relation vklad "SELECT * FROM vklad" | relpipe-out-tabular vklad: ╭────────────────┬────────────────┬─────────────────╮ │ jmeno (string) │ banka (string) │ vklad (integer) │ ├────────────────┼────────────────┼─────────────────┤ │ jan │ KB │ 100 │ │ jan │ CSOB │ 200 │ │ jan │ CS │ 100 │ │ tonda │ CSOB │ 100 │ │ tonda │ CS │ 100 │ │ pepa │ KB │ 300 │ │ jiri │ KB │ 200 │ │ jiri │ CSOB │ 100 │ │ jiri │ CS │ 100 │ │ pepa │ CS │ 100 │ ╰────────────────┴────────────────┴─────────────────╯ Record count: 10
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.