So the question is what if I have multiple conditions say "COLOR LIKE
'Blue' [AND|OR] NAME LIKE 'Fred'". Will I have to create a JOIN for
each?

SELECT *
  FROM T
    LEFT JOIN StringVal CSV ON T.ID = CSV.REF_ID
    INNER JOIN StringType CST
      ON CSV.TYPE_ID = CST.ID AND CST.ID = COLOR
    LEFT JOIN StringVal NSV ON T.ID = NSV.REF_ID
    INNER JOIN StringType NST
      ON NSV.TYPE_ID = NST.ID AND NST.ID = NAME
    WHERE 
        ( CSV.VAL = 'Blue' OR (CST.VAL = 'Blue' AND CSV.REF_ID IS NULL)
)
    AND
        ( NSV.VAL = 'Fred' OR (NST.VAL = 'Fred' AND NSV.REF_ID IS NULL)
)

How do I generally simplify this?

R.

-----Original Message-----
From: Robert DiFalco [mailto:[EMAIL PROTECTED] 
Sent: Friday, August 04, 2006 4:12 PM
To: [EMAIL PROTECTED]
Cc: mysql@lists.mysql.com
Subject: RE: Query Help for Loosely Couple Properties

I think this only works if I "know" that "Orange" is the default value.
For example if "Orange" is the default and I am searching for "Blue" I
will have to use a different query. Since I don't know the default (its
in the type table) I would have to do two queries. How about something
like this?

SELECT *
  FROM T
    LEFT JOIN StringVal SV ON T.ID = SV.REF_ID
    INNER JOIN StringType ST
      ON SV.TYPE_ID = ST.ID AND ST.ID = COLOR
    WHERE SV.VAL = "Blue" OR (ST.VAL = "Blue" AND SV.REF_ID IS NULL);

 

-----Original Message-----
From: Jay Pipes [mailto:[EMAIL PROTECTED]
Sent: Wednesday, August 02, 2006 9:37 AM
To: Robert DiFalco
Cc: mysql@lists.mysql.com
Subject: Re: Query Help for Loosely Couple Properties

On Tue, 2006-08-01 at 16:23 -0700, Robert DiFalco wrote:
> The question is, how do I query this? Say I want all records from 
> table T whose COLOR property value is ORANGE.
> 
> The only thing I can come up with (and I'm no SQL expert and this 
> looks wrong to me) is the following:
> 
> SELECT *
> FROM T
> WHERE
> (
>     T.ID NOT IN 
>     ( 
>         SELECT StringVal.REF_ID 
>         FROM StringVal 
>         WHERE StringValue.TYPE_ID = COLOR 
>     )
>     AND
>     EXISTS
>     ( 
>         SELECT * 
>         FROM StringType 
>         WHERE StringType.DEF_VAL LIKE "Orange" AND StringType.ID = 
> COLOR
> 
>     )
> )
> OR
> (
>     T.ID IN 
>     (
>         SELECT StringVal.REF_ID 
>         FROM StringVal 
>         WHERE StringVal.VAL LIKE "Orange" AND StringVal.TYPE_ID =
COLOR
>     )
> )

SELECT * FROM T
LEFT JOIN StringVal V
ON T.ID = V.REF_ID
INNER JOIN StringType ST
ON V.TYPE_ID = ST.ID
AND ST.ID = COLOR
WHERE V.REF_ID IS NULL
OR V.VAL = "Orange";




--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:
http://lists.mysql.com/[EMAIL PROTECTED]




--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to