Autor Zpráva
capricorn
Profil
Zdravím,

řeším následující problém. Mám dvě tabulky, tabulka1 a tabulka2.
Tabulka1 má jen sloupeček name a je na něm nastaven fulltext index.

Např.
name
Anna Nováková
Anička Nováčková

Tabulka2 má sloupečky id, name, name_ag (parametry pro AGAINST).

Např.
id | name| name_ag
1 | Anna| +anna


A teď potřebuji procházet tabulku1 a vypisovat id z tabulky2 a z tabulky1 name za podmínky, že řádek z tabulka1 odpovídá parametru z tabulky2. A aby to nebylo málo, tak potřebuji statistiku, kolik řádku z tabulky1 nebylo a nebylo nalezeno v tabulce2.

Řešil bych to pomocí cyklu, ale zajímá mně, jestli neexistuje nějaké elegantní a hlavně rychlé řešení pomocí databáze.
Kajman_
Profil *
Možná hledáte něco takového...
select t2.id, t1.name
from tabulka1 t1, tabulka2 t2
where match (t1.name) against (t2.name_ag /*in boolean mode*/)


select
(select count(distinct t1.name)
from tabulka1 t1, tabulka2 t2
where match (t1.name) against (t2.name_ag /*in boolean mode*/)) nalezeno,
(select count(*) from tabulka1) vsech
from dual
capricorn
Profil
Kajman:

Děkuji, tohle jsem právě hledal. Vyskytl se problém.

against (t2.name_ag IN BOOLEAN MODE) vrátí Incorrect arguments to AGAINST
against ('t2.name_ag' IN BOOLEAN MODE) hledá slovo t2.name_ag
against('+anna' IN BOOLEAN MODE) vrátí řádky

Nevíte prosím v čem by mohl být problém?
Kajman_
Profil *
Problém bude v tom, že není povolené tam hodit přímo sloupeček...
AGAINST takes a string to search for, and an optional modifier that indicates what type of search to perform. The search string must be a literal string, not a variable or a column name.

Asi bude potřeba opravdu nějaký whilecyklus a buď to zpracovávat postupně, nebo sestavit něco jako
select 1 as zdrojid, t1.name from tabulka1 t1 where match (t1.name) against ('+anna' in boolean mode)
union all
select 2 as zdrojid, t1.name from tabulka1 t1 where match (t1.name) against ('+vana' in boolean mode)
union all
select 3 as zdrojid, t1.name from tabulka1 t1 where match (t1.name) against ('+naha' in boolean mode)
capricorn
Profil
Kajman:

Tomu cyklu se právě vyhýbám, každopádně děkuji.

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: