SQL vyhledání a párování ve dvou tabulkách

Trenkiee

SQL vyhledání a párování ve dvou tabulkách
« kdy: 24. 10. 2015, 14:33:23 »
Dobry den.

Mam mozno jednoduchu otazku ale popravde neviem sa pohnut. Mam dve tabulky kazda je rozdielna ale kazda ma rovnake udaje v jednom stlpci.
Tabulka A ma stlpce a,b,c,d,e a v stlpci b su referencne kody tabulka B ma stlpce 1,2,3,4 a referencne kody ma v tabulke 4.
Ja by som potreboval funkciu / prikaz ktory by nacital prvy riadok s tabulky A so stlpca b vybral cislo. Presiel  tabulku B stlpec 4 a ak je zhoda zapisal do tabulky B do stlpca 1 hodnotu xyz. A zasa s tabulky A nacital druhy riadok... Atd atd...
Neviem si dobre predstavit syntax SQL prikazu pripadne php script. Problemom je ze tie tabulky maju cca 800.000 riadkov. Dakujem za kazdu radu ktora ma navedie na riesenie.
Dakujem a prajem pekny den
« Poslední změna: 25. 10. 2015, 21:56:35 od Petr Krčmář »


Kit

Re:Pomoc s SQL vyhladavanie a parovanie v 2 tabulkach
« Odpověď #1 kdy: 24. 10. 2015, 16:23:04 »
Tabulka A ma stlpce a,b,c,d,e a v stlpci b su referencne kody tabulka B ma stlpce 1,2,3,4 a referencne kody ma v tabulke 4.

Nemůžeš pojmenovat tabulku nebo její sloupce čísly. Identifikátor musí začínat písmenem, dolarem nebo podtržítkem. Jinak bys musel všechny identifikátory quotovat.

pb.

Re:Pomoc s SQL vyhladavanie a parovanie v 2 tabulkach
« Odpověď #2 kdy: 24. 10. 2015, 19:09:56 »
Uvažujete příliš sekvenčně, procedurálně. V SQL se pracuje s množinami.

Možná takto:

update B set "1"=xyz were "4" in (select b from a);

pb.

Re:Pomoc s SQL vyhladavanie a parovanie v 2 tabulkach
« Odpověď #3 kdy: 24. 10. 2015, 19:18:36 »
Ještě mě napadá... skutečně potřebujete takto hromadně upravovat data v nějaké tabulce? Není to jen vaše představa? U inteligentně navržené datové struktury bývají podobné úlohy vzácné, i když rozhodně ne neobvyklé. Dokážu si představit takovou úlohu třeba při přepočtech jednoho formátu na jiný formát, což bych zařadil mezi jednorázové úkony. Jak s tím souvisí php? Snažíte se něco takového zabudovat do aplikace? Pokud ano, troufám si tvrdit, že existuje lepší řešení.

Trenkiee

Re:Pomoc s SQL vyhladavanie a parovanie v 2 tabulkach
« Odpověď #4 kdy: 24. 10. 2015, 21:02:07 »
No problemom je ze moje riesenie je asi taketo
Kód: [Vybrat]
      SELECT ARUKOD
FROM csvdata AS td
WHERE (NOT EXISTS
        (SELECT reference
         FROM ps_product AS d
         WHERE (ARUKOD = reference)))
Bohuzial je to neskutocne pomale obe databazy maju cez 600t poloziek.
Zadanie je sparovat polozky ktore maju rovnake hodnoty v 2 stlpcoch.


Trenkiee

Re:Pomoc s SQL vyhladavanie a parovanie v 2 tabulkach
« Odpověď #5 kdy: 24. 10. 2015, 21:04:28 »
Pozeram sa na to tak ze nacitam polozku stlpca ARUKOD a prebehnem druhu tabulku reference ci najdem presnu zhodu ak ano ulozim ine hodnoty s tabulky A na poziciu polozky s tabulky B. Len neviem presne ako na to aby to nebolo tak strasne narocne ako teraz.

pb.

Re:Pomoc s SQL vyhladavanie a parovanie v 2 tabulkach
« Odpověď #6 kdy: 24. 10. 2015, 21:36:41 »
... a ak je zhoda zapisal do tabulky B do stlpca 1 hodnotu xyz...

Na zapisování do tabulky musíte použít příkaz update. Příkaz select dělá něco jiného.

Co to má vlastně dělat? Nepotřebujete nakonec obyčejný join?

http://www.w3schools.com/sql/sql_join.asp

Pro lepší výkon potřebujete vytvořit nad tabulkami indexy. 600 nebo 800 nebo kolik vlastně tisíc záznamů není moc.

Trenkiee

Re:Pomoc s SQL vyhladavanie a parovanie v 2 tabulkach
« Odpověď #7 kdy: 24. 10. 2015, 22:25:42 »
Dobre podme teda na to odzaciatku.
Mam csv export bez indexu. Obsahuje pre mna 2 dvolezite stlpce jeden cislo a druhy parameter.
V databaze je druha tabulka obsahuje cislo zhodne s tabulkou 1 a parameter kam sa ma naimportovat/updatnut parameter s tabulky 1.
Cele to ma byt php script a kedze su to velke tabulky (600.000 riadkov) idealne by to mal spracovavat po 1000 riadkoch.
Hore je sql tiez som skusal join ale nedobehne mi to.

devnull

Re:Pomoc s SQL vyhladavanie a parovanie v 2 tabulkach
« Odpověď #8 kdy: 24. 10. 2015, 22:41:56 »
Ja bych do toho PHP skript moc nemotal.

Cele csv bych nacpal do docasne tabulky ( mozna je to tabulka 1? ) a pak nad tim spustil idealne jeden update prikaz, ktery by to projoinoval a poupdatoval.
Pokud je tam 600k zaznamu, bude zalezet na indexech.
Update pirkaz bych klidne poslal, kdybych se vyznal v tvem popisu ( nevyznam ).

Mozna by nebylo spatne poslat strukturu tabulek ( vcetene datovych typu a stavajicich indexu) - prikaz SHOW CREATE TABLE x v mysql. a pak konkretne sdelit co je potreba kam nacpat


Kit

Re:Pomoc s SQL vyhladavanie a parovanie v 2 tabulkach
« Odpověď #9 kdy: 24. 10. 2015, 22:43:31 »
Naimportuj to CSV jako dočasnou tabulku a pak aplikuj některý z dotazů na
http://stackoverflow.com/questions/15209414/how-to-use-join-in-update-query