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
61/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

Tietokannassa ei ole rivejä, tietokannan tauluissa on. Mutta ehkä tämä oli ap:n käännösvirhe.

Versiohistorian kaivelu kuulostaa kannan ylläpitäjän tehtävältä. Jos ap haki ylläpitotehtäviin, niin tuskin on tarvetta kysellä tällaisia.

Tehtävä vaatisi hieman taustatietoja. Tarkoitetaanko oikeasti tietokantoja ja onko kyseessä työ jossa ajetaan SQL-kyselyjä, vain käsitelläänkö tietojoukkoja Excelillä.

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

Vierailija kirjoitti:

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

Entä jos rivi poistettiin jo kaksi kuukautta sitten? Mutta, lokien selailu on ylläpitäjän hommia, niihin ei muut edes pääse käsiksi. Jotain muuta ratkaisua tässä haetaan. Toimiva SQL-lause on toki triviaali ja kerrottu heti ensimmäisissä vastauksissa, mutta ehkä tässä ei ollut kyse siitä.

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

Vierailija kirjoitti:

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

 

Voi kuule nykyajan tietokannat antavat millisekunneissa vastauksen indeksikyselyyn SELECT * FROM a WHERE Id NOT IN (SELECT DISTINCT Id FROM B) vaikka taulun koko on miljoonia rivejä. Ei kannata pähkäillä tuntikausia kustannustehokkaampaa tapaa selvittää asia.

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

Vierailija kirjoitti:

Vierailija kirjoitti:

Antaisin ChatGPT:n tehdä homman.

Onpas tietoturva hyvässä kunnossa, jos chatgpt pääsisi tietokantaan käsiksi.

Luottamuksella kaikki tiedot vaan, NSA vartioi

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

Katsoisin lokista...

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

Et tullut valituksi

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

Vierailija kirjoitti:

Vierailija kirjoitti:

Vierailija kirjoitti:

Onko tosiaan kysymys kahdesta eri tietokannasta vai kahdesta taulusta? Jälkimmäinen olisi tosi helppo tehdä yhdellä SQL-kyselyllä, mutta edellisen osaisin tehdä vain kirjoittamalla muuta ohjelmakoodia SQL:n lisäksi.

Ap:n vastaus oli minusta joka tapauksessa huono.

 

Select avainsarake molemmista, lajittelee ja sitten vertaa rivi riviltä. Sen voi tehdä myös tehokkaammin mutta tuo on yksinkertainen ratkaisu.

Jos kysymys on kahdesta tietokannasta, niin niissä voi kummassakin olla satoja tauluja. Eli tuo juttu pitäisi toistaa tietokannan jokaiselle taululle. 

Mutta jos kysymys on kahdesta taulusta, niin ratkaisu on helppo:

SELECT *

FROM Taulu1 WHERE avainsarake NOT IN

(SELECT avainsarake

 FROM Taulu2);

Oliko kyse tietokannoista, jotka ovat toisiinsa yhteydessä, vai pitääkö ensin data siirtää paikasta 1. paikkaan 2. vertailua varten?

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

Vierailija kirjoitti:

Vierailija kirjoitti:

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

 

Voi kuule nykyajan tietokannat antavat millisekunneissa vastauksen indeksikyselyyn SELECT * FROM a WHERE Id NOT IN (SELECT DISTINCT Id FROM B) vaikka taulun koko on miljoonia rivejä. Ei kannata pähkäillä tuntikausia kustannustehokkaampaa tapaa selvittää asia.

Miljoonien rivien taulu ei olekaan kovinkaan suuri.

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

Vierailija kirjoitti:

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

Tietokannassa ei ole rivejä, tietokannan tauluissa on. Mutta ehkä tämä oli ap:n käännösvirhe.

Versiohistorian kaivelu kuulostaa kannan ylläpitäjän tehtävältä. Jos ap haki ylläpitotehtäviin, niin tuskin on tarvetta kysellä tällaisia.

Tehtävä vaatisi hieman taustatietoja. Tarkoitetaanko oikeasti tietokantoja ja onko kyseessä työ jossa ajetaan SQL-kyselyjä, vain käsitelläänkö tietojoukkoja Excelillä.

Jos tietokannan tauluissa on rivejä niin kyllähän ne rivit ovat tietokannassa.

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

Kysymyksen perusteella oletan, että tietokanta on vakaassa tilassa poiston jälkeen, eli uusia tapahtumia ei virtaa sisään poiston jälkeen. Sitten katsoisin molempien tietokantojen tapahtumalokin viimeisen tapahtuman, aikaleimasta näkee kumpi on myöhempi. 



Jos loki ei ole päällä, on selvitettävä tietokantojen käyttöön liittyviä yksityiskohtia esim. alkaen siitä, onko kyseessä SQL-tietokanta ja pääseekö molempiin käsiksi samanaikaisesti.

 

Kirjoita seuraavat numerot peräkkäin: kahdeksan viisi kuusi