Welcome to Sign in | Help
in Search

rescriere select cu intersect

Last post 04-24-2008, 11:17 PM by B_gd_n[ ]Sahlean. 5 replies.
Sort Posts: Previous Next
  •  04-16-2008, 8:02 PM 4665

    rescriere select cu intersect

    se dau 2 tabele:
    CREATE TABLE [dbo].[test](
    [cod] [varchar](50) NULL,
    [value] [varchar](50) NULL
    ) ON [PRIMARY]

    insert into test values ('genre','Sports')
    insert into test values ('publisher','Provider1')



    CREATE TABLE [dbo].[productsTest](
    [genre] [varchar](50) NULL,
    [title] [varchar](50) NULL,
    [publisher] [varchar](50) NULL
    ) ON [PRIMARY]

    insert into productsTest values ('Sports','Title1','Provider1')
    insert into productsTest values ('Sports','Title1','Provider2')
    insert into productsTest values ('Action','Title1','Provider1')

    As dori un query care sa imi intoarca din productsTest doar prima inregistrare.

    Am reusit doar cu un intersect

    select p.*
    from
     test t,
    productsTest p
    where
    t.cod= 'genre' and t.value = p.genre

    intersect

    select p.*
    from
    test t,
    productsTest p
    where
    t.cod= 'publisher' and t.value = p.publisher

    Se poate si altfel?


    Ideea este ca vrea sa fac un search global, variabilele sa le primesc intr-un XML si in functie de tipul lor sa intorc toate rezultatele valide.

    Cristi
  •  04-16-2008, 10:00 PM 4669 in reply to 4665

    Re: rescriere select cu intersect

    1. Cum adica "prima"? In ce ordine? Nu prea inteleg ce vrei...

    2. Ce cauta in acelasi tabel date despre "genre" si "publisher"? De ce le "amesteci"? Incerci sa implementezi o schema "EAV"?

    3. Pentru query-uri vezi BOL SQL 2005 ----> Join Fundamentals

  •  04-17-2008, 11:48 AM 4670 in reply to 4669

    Re: rescriere select cu intersect

    1. prima insemnand inregistrarea care contine ambele valori adica genre=Sports si publisher = Provider1

    2. nu sunt in acelasi tabel dar pentru simplitate le-am pus asa doar aici.

    2.1 a sort of.


    Problema e de genul am o tabela unde criteriile de cautare sunt coloanele si primesc intr-un XML criteriile de cautare, adica o variabila este de genul "genre", "publisher" etc si are O valoare anume. In functie de genul acestei variabile aflu cu ce coloana din tabela mare sa compar. In realitate datele sunt in mai multe tabele dar pentru simplitate le-am denormalizat in una singura.
  •  04-17-2008, 1:22 PM 4671 in reply to 4670

    Re: rescriere select cu intersect

    Din cate vad lucrezi cu SQL 2005. Incearca sa urmezi exemplul de aici:

    http://weblogs.sqlteam.com/mladenp/archive/2006/10/14/14032.aspx

    Ideea este sa pui "atributele" unui produs (in cazul tau "genre", "publisher", etc) intr-un camp avand tipul de date XML, si sa cauti dupa atribute folosind acest camp (indexat in functie de cautari, asa cum expune BOL). Eu nu am testat astfel de situatie, dar cred ca merita incercat...vorba autorului: "In the end the xml datatype in sql server starts to make sense" Smile

  •  04-24-2008, 6:44 PM 4755 in reply to 4665

    Re: rescriere select cu intersect

    Da, se poate şi aşa:

    SELECT * FROM productsTest p
    WHERE p.genre IN (SELECT t.value FROM test t WHERE t.cod='genre')
    AND p.publisher IN (SELECT t.value FROM test t WHERE t.cod='publisher')

    Răzvan
  •  04-24-2008, 11:17 PM 4756 in reply to 4755

    Re: rescriere select cu intersect

    depends > problema ta principală constă în designul bazei de date înainte de toate.
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems