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: [email protected]
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: [email protected]
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]