Hi,

I?m trying to do some analysis across a couple of tables and the SQL is beyond 
my meagre skills. I?m struggling to even describe the problem to be honest.

The high level description is that I have three tables, Users, Devices and 
Perimeter_Notifications. The high level description is that I want to extract a 
list of users from a database to send information to if they are not on 
holiday. However I don?t necessarily have the holiday_mode set by the user and 
so our assumption is that unless the holiday mode is set to 1 (they are on 
holiday) its is assumed to be 0. Its the assumption thats causing the problem. 
If there is no entries in Perimeter_Notifications thats also fine, no rows get 
returned. 

CREATE TABLE "Users" (
        "email" TEXT NOT NULL,
        "password" TEXT NOT NULL,
        "salt" TEXT NOT NULL,
        "creation_timestamp" TEXT NOT NULL DEFAULT 
(datetime('now','localtime')),
       PRIMARY KEY("email")
);

CREATE TABLE "Devices" (
        "Email" TEXT NOT NULL,
        "UUID" text NOT NULL,
        "Holiday_Mode" integer NOT NULL
);

CREATE TABLE "Perimeter_Notifications" (
       "Email" text NOT NULL ,
        "UUID" text NOT NULL,
        "route_id" INTEGER NOT NULL,
        "day" integer NOT NULL,
        "hour" integer NOT NULL
);

(Please note the UUID is nothing to do with the UUID discussion a few days ago, 
I?m not brave enough to open up that little can of worms, we just happen to 
have chosen that column name a few months ago for mobile devices. Also in case 
anybody asks, we're not storing passwords in plain text either). 

I?m not sure if my database design is wrong or I simply cannot work out the SQL 
to make it work. It might actually be both :)

What I want to do is join the table Users and Perimeter Notifications together 
but only if the value of Devices.Holiday_Mode is either non existent or if 
Devices.Holiday_Mode does exist and its 0. If Devices.Holiday_Mode is 1 it 
means the user is on holiday and don?t send them anything.

I can work out the logic if Devices.Holiday_Mode actually exists and is either 
1 or 0. Thats pretty basic SQL.However if there is no row in Devices with that 
Email and UUID then thats the equivalent as Devices.Holiday_Mode being 0. I?ve 
looked at IS NULL or NOT EXISTS but I?m struggling to get my head around it 
all. I can do all of this in a higher level language (not sure if Perl is 
higher level than SQL) but I should be able to do this in SQL itself. 

Any advice or guidance welcomed please.

Thanks for reading,

Rob.

Reply via email to