I have a table that contains properties that can be associated with any table whose primary key is a LONG. Lets say that there is just one kind of property. The table looks something like this:
TABLE StringVal REF_ID BIGINT // row to associate property with TYPE_ID BIGINT // type of string property VAL VARCHAR // property value P_KEY( REF_ID, TYPE_ID ) There is another table to represent a specific StringVal type along with its default value: TABLE StringType ID BIGINT // The TYPE ID NAME VARCHAR // The unique name of this property DEF_VAL VARCHAR // The default value of this property The rub is that the target table could have millions of records and I only want a record in StringVal if the associated property is going to be a value other than the default. So consider that StringType has a record that defines a property named "COLOR" with a default value of "ORANGE". For some table T, a T record will only have a corresponding row in StringVal if it has a COLOR property whose value has been explicitly set. It *could* be ORANGE but in most cases it will be something else. Each row implicitly gets a COLOR value of ORANGE. 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 ) ) Any suggestions on how to simplify this (besides writing a row for each T that has the default value)? Should I lay out the tables differently or keep the DDL the same and just clean up the query? R. -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]