Autor Zpráva
danhill
Profil
Předem děkuji za pomoc.
Zase řeším dotaz přes dvě tabulky a nejde mit to samozřejmě.
Mám nyní takový dotaz:
SELECT gc_code FROM final WHERE gc_code IN (SELECT gc_code FROM `finds` WHERE `user` = '487')
Výsledkem jsou všechny gc_code, které nejsou v tabulce finds uživatele 487.
A potřeboval bych tento dotaz trochu upravit, tak aby dotaz vrátil dva sloupce a všechny gc_code z první tabulky, jen v druhém sloupci by u těch,které jsou uživatele 487 napsal cokoli jiného než u těch gc_code,které tohoto uživatele nejsou. A je jedno co napíše.Třeba find a notfind, nebo true a false ...

Děkuji moc.
juriad
Profil
SELECT f.gc_code, g.nejaky_sloupec
FROM final f
LEFT JOIN finds g ON f.gc_code = g.gc_code AND g.user = 487

Následně podle toho nejaky_sloupec poznáš, zda byla nalezená nebo ne. V případě not found bude hodnota NULL.
danhill
Profil
Děkuji , ano, tohle je přesně výsledek, jaký jsem si představoval.
Tak do "nejaky_sloupec" jsem zadal taky gc_code, protože to je hodnota,kterou porovnávám a je v obou tabulkách ...
Jen v obou tabulkách je přes 15000 řádků a zpracování takového dotazu trvá skoro půl minuty, takže bude asi potřeba ho trochu postavit jinak.
A ještě se chci zeptat.
Když budu chtít tímto dotazem vypsat všechny sloupce z tabulky final, pak to mohu napsat takto?:
SELECT f.*, g.gc_code
juriad
Profil
danhill:
Ano, f.* bude fungovat.

Máš na těch tabulkách nějaké indexy nebo klíče? fc_code by měl primární klíč v tabulce finals. A doporučil bych index na dvojici (user, fc_code) v tabulce finds.
danhill
Profil
gc_code - ano přeně na ty sloupce jako píšeš mám primární klíče. Už z minula,když jsem právě tady v jiném vlákně řešil ten původní dotaz.Velice to tehdy pomohlo.
Ten proběhne během chviličky,ale na tohle se fakt čeká velmi dlouho ...
juriad
Profil
danhill:
Ukaž celý dotaz,
jeho explain (explain select f.*, ...),
definice tabulek (show create table final; show create table finds)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0