Tapahtumat

Kun kirjaudut sisään näet tässä ilmoitukset sinua kiinnostavista asioista.

Kirjaudu sisään

Työhaastattelussa: sinulla on kaksi samanlaista tietokantaa. Toisesta poistetaan rivi. Miten saat selville, mikä rivi poistettiin?

Vierailija
04.05.2025 |

Vastasin, että laitan tietokannat vierekkäisiin ikkunoihin ja alan rivi riviltä vertailla. Onko tämä oikea vastaus? Panostahan siinä aikanaan tulee sen kohdalle, jota ei toisesta löydy!

Kommentit (70)

Vierailija
41/70 |
04.05.2025 |
Näytä aiemmat lainaukset

Vierailija kirjoitti:

Syötinpä tuon eurooppalaiselle Mistral-tekoälylle ja sieltä tuli ihan järkevää vastausta sieltäkin, ymmärrettävyydessään ehkä selkein: 

"minulla on tehtävä pieni SQL lause, voitko auttaa. On kaksi tietokantaa, TKa ja siitä tehty kopio TKb. Molemmat sisältävät 31 taulukkoa, joista yksi on nimeltään TaulVelat. Nyt joku on poistanut yhden tietuerivin TKb-tietokannan TaulVelat-taulukosta. Tee SQL-lause, jossa verrataan näiden kahden taulukon tietueet ja tulostetaan tietue, joka toisesta puuttuu."

Voit käyttää SQL-lauseketta, joka vertaa tietueita kahdesta taulukosta ja tulostaa ne tietueet, jotka puuttuvat toisesta taulukosta. Oletetaan, että taulukoissa TaulVelat on jokin yksilöivä sarake, esimerkiksi id, jonka avulla tietueita voidaan verrata.

Alla on esimerkki SQL-lausekkeesta, joka tekee tämän:

SELECT TKa.TaulVelat.* FROM TKa.TaulVelat LEFT JOIN TKb.TaulVelat ON TKa.TaulVelat.id = TKb.Ta

Kumpikaan näistä tekoälyjen antamista vastauksista ei varmasti toimi edes. Ootko kokeillut? 

Vierailija
42/70 |
04.05.2025 |
Näytä aiemmat lainaukset

Päästä se kiinalainen tekoäly.molempiin tietokantoihin. Syökäisee sulle vastauksen kantojen eroavaisuuksista alle nanosekunnissa ja samalla imuroi kaiken firman datan ja salaisuudet Kiinaan.

Sisältö jatkuu mainoksen alla
Sisältö jatkuu mainoksen alla
Vierailija
43/70 |
04.05.2025 |
Näytä aiemmat lainaukset

Vierailija kirjoitti:

Päästä se kiinalainen tekoäly.molempiin tietokantoihin. Syökäisee sulle vastauksen kantojen eroavaisuuksista alle nanosekunnissa ja samalla imuroi kaiken firman datan ja salaisuudet Kiinaan.

Voisin päästääkin. Ei ole meidän firmassa mitään sellaista tietoa mitä kinkit ei jo tietäs. Ehkä yhteyslista ja myyntihinnat, mutta arvaahan ne senkin, ei ole niin suuria katteita meidän tuotteissa. Kyllä minä alan nähdä jenkit suurempana uhkana kuin kiinalaiset. Jenkit ei ole ystäviä, ja se, ovatko edes luotettavia sopimuskumppaneita, on jo kyseenalaista ainakin nykyisen pressan vallassa ollessa.

Vierailija
44/70 |
04.05.2025 |
Näytä aiemmat lainaukset

No saitko paikan?

Vierailija
45/70 |
04.05.2025 |
Näytä aiemmat lainaukset

Copypeistaan exceliin ja se missä on vähemmän rivejä, on se tiedosto mistä on rivi poistettu.

Pekka 5 v

Vierailija
46/70 |
04.05.2025 |
Näytä aiemmat lainaukset

Drop Database <tietokannan nimi> tietenkin.

näin saadaan tietoon pudotettu, eli poistettu tieto.

 

Sisältö jatkuu mainoksen alla
Vierailija
47/70 |
05.05.2025 |
Näytä aiemmat lainaukset

Julkisella sektorilla homma tehdään niin että taulukot kirjoitetaan ruutupaperille käsin ja aletaan vasta sitten vertailemaan silmämääräisesti. Projektilla täytyy olla tietysti neljä esihenkilöä ja projektipalavereja on joka toinen päivä.

Vierailija
48/70 |
05.05.2025 |
Näytä aiemmat lainaukset

Ottaisin tietokoneen töpselin irti. Jos se olisi liian tiukassa, leikkaisin saksilla poikki. Sitten katsoisin mitä tapahtuu, että palautuuko poistettu lause vai tuleeko niitä peräti lisää.

Sisältö jatkuu mainoksen alla
Vierailija
49/70 |
05.05.2025 |
Näytä aiemmat lainaukset

Vierailija kirjoitti:

Vastauksesi osoittaa loogista ajattelua, mutta työhaastattelutilanteessa odotetaan usein tehokkaampaa, teknisesti optimoitua ratkaisua varsinkin jos haet tekniseen tai IT-alan tehtävään.

Mikä olisi parempi vastaus?

Riippuen tietokannan koosta ja käytössä olevista työkaluista, tehokkaampi tapa olisi:

1. SQL-kyselyllä erot

Jos kyseessä on relaatiotietokanta (esim. PostgreSQL, MySQL), voit tehdä EXCEPT-operaation (tai vastaavan) kahden taulun välillä:

sql

CopyEdit

SELECT * FROM tietokanta1.taulu EXCEPT SELECT * FROM tietokanta2.taulu;

Tämä palauttaa rivit, jotka ovat vain ensimmäisessä tietokannassa, eli poistettu rivi.

Joissain tietokannoissa (esim. MySQL) EXCEPT ei ole suoraan tuettu, mutta voit käyttää LEFT JOINia ja IS NULL -ehtoa:

sql

CopyEdit

SELECT a.* FROM tietokanta1.tau

Meinaatko, että kesken työhaastattelun alkaisit konsultoisa ChatGPT:tä?

Vierailija
50/70 |
05.05.2025 |
Näytä aiemmat lainaukset

Vierailija kirjoitti:

Miksi hakisin tuollaista suorittavan työn paikkaa?

Siksi ettet olisi enää työtön.

Sisältö jatkuu mainoksen alla
Vierailija
51/70 |
05.05.2025 |
Näytä aiemmat lainaukset

Luultavasti ekaksi katsoisin logista mikä käsky on suoritettu viimeksi siihen mistä on poistettu jotain. 

Vierailija
52/70 |
05.05.2025 |
Näytä aiemmat lainaukset

Vierailija kirjoitti:

Julkisella sektorilla homma tehdään niin että taulukot kirjoitetaan ruutupaperille käsin ja aletaan vasta sitten vertailemaan silmämääräisesti. Projektilla täytyy olla tietysti neljä esihenkilöä ja projektipalavereja on joka toinen päivä.

Unohdit sen vaiheen jossa se ruutupaperi skannataan tiedostoksi ja tekstitulkitaan, printataan uudelleen paperille ja lykätään tulevien tehtävien pinoon jossa se käsitellään sitten kun sen vuoro tulee joskus 2kk päästä ehkä. Jos ei satu parin vuoden sapattivapaa, opintovapaa tai muuten vaan pitämättömät saldovapaat (5kk) siihen väliin. 

Sisältö jatkuu mainoksen alla
Vierailija
53/70 |
05.05.2025 |
Näytä aiemmat lainaukset

Jos kysymys on jollekin epäselvä kannattaa ensinnä kysyä asiaa tarkentava kysymys. 

 

Vierailija
54/70 |
05.05.2025 |
Näytä aiemmat lainaukset

Vierailija kirjoitti:

Riippuu tietokannasta, mutta luettavassa olevassa muodossa on helppo etsiä eroavaisuus tuetokannan vertailutoiminnalla.. 

tosin sitä ennen kysyisin onko versiohistorian tallennus päällä ja katsoisin sen kautta, mitä kohtaa on muutettu, jos tämä on ollut viimeisen muutos kompakysymykseen ctrl+z

Joo, mulle tuli mieleen myös tuo edellinen versio. Mutta jos on iso tietokanta. Niin ei ole helppo näin selvittää.

Sisältö jatkuu mainoksen alla
Vierailija
55/70 |
05.05.2025 |
Näytä aiemmat lainaukset

No, antoivatko oikean vastauksen tähän tietokantakysymykseen? Jos antoivat, kerro se oikea tapa meillekin.

Vierailija
56/70 |
05.05.2025 |
Näytä aiemmat lainaukset

Tyhmä tapa on vertailla kantojen sisältöä koska kannat voi olla todella suuret. Älykkäämpi on hakea se käsky jolla poisto on suoritettu tavalla tai toisella. Jossain logissa nuo muutoskäskyt kait on luulisin?

Voihan sitä vaikka dumpata molemmat (lajitellut) kannat tekstiriveiksi ja sitten ottaa diff:in joka kertoo mikä rivi on erilainen :D

 

Vierailija
57/70 |
05.05.2025 |
Näytä aiemmat lainaukset

No kattoisin lokista.

Vierailija
58/70 |
05.05.2025 |
Näytä aiemmat lainaukset

Yritin houkutella Kiinan_aivoja miettimään muuta periaatteellisempaa ratkaisumallia, mutta ei auttanut, kyllä sekin SQL:ää tarjosi kuten joku tuolla aiemmin oli jo kokeillut. Kun oikein muotoili kysymyksen "takapirumaisesti", alkoi deepseek antamaan muitakin vaihtoehtoja:

Tässä on muutamia vaihtoehtoja SQL-lauseen lisäksi, joilla voit selvittää poistetun rivin:

Transaktiolokien tutkiminen:Jos tietokannassa on transaktioloki (transaction log) käytössä, voit tutkia sitä nähdäksesi, mikä operaatio (DELETE) suoritettiin ja mikä rivi poistettiin.

Triggerit:Jos tietokannassa on triggerit käytössä (esim. DELETE-triggeri), voit tarkistaa, onko triggeri tallentanut poistetun rivin tiedot johonkin lokitauluun.

Versiointi tai peilikopiot:Jos tietokannasta on otettu varmuuskopio (tai snapshot) ennen poistoa, voit verrata nykyistä tietokantaa varmuuskopioon nähdäksesi erot.

CDC (Change Data Capture):Jos tietokannassa on CDC käytössä, se tallentaa kaikki muutokset (mukaan lukien poistot) erilliseen tauluun, josta voit hakea poistetun rivin.

Käyttäjä- tai järjestelmälokit:Tarkista sovellus- tai järjestelmälokit, jos ne kirjaavat tietokannan muutokset.

Aikaleimojen vertailu:Jos tauluissa on viimeksi muokattu-aikaleima (timestamp), voit etsiä rivejä, jotka olivat toisessa taulussa mutta eivät toisessa.

Vierailija
59/70 |
05.05.2025 |
Näytä aiemmat lainaukset

Periaatteessa kahden tietokannan pitäminen ajan tasalla on ajanhaaskausta. Koska tehtävänä oli kuitenkin kahden tietokannan tietojen vertailu, lienee SQL nopein tapa. Miten pitkälle muuten tuo windowsin verkkokäyttis pääsee. Jos työryhmässä kaksi eri käyttäjää muuttaa samannimistä asiakirjaa omilla koneillaan ja sitten ne pitäisi palvelimelle yhdistää kun palaa työpaikalle, mitä se tekee, en ole koskaan käytännössä kokeillut.

 

Vierailija
60/70 |
05.05.2025 |
Näytä aiemmat lainaukset

Kysyisin, että kuka hölmö teidän firmassa meni poistamaan sen rivin. Ehdotan, että palkkaatte minut sen torven tilalle. Yksinkertaista.

Kirjoita seuraavat numerot peräkkäin: kuusi seitsemän yhdeksän