You need LEFT JOIN. 

Also, keep in mind that no operator other than IS NULL or IS NOT NULL works on 
NULL.

On Mar 17, 2012, at 9:06 AM, RhinosoRoss <bosss...@hotmail.com> wrote:

> 
> Hi everyone,
> Sorry to be a pest, but I'm drowning in manual pages and clearly missing
> something simple. I don't think I'm going to progress without some help.
> 
> I noticed at work that they were using excel to store serial numbers of
> devices sold in orders... Should be a database! So I knocked one up in MS
> Access in a couple of minutes - but I'm trying to learn SQLite at home, I'm
> a C++ programmer so the actual embedding is straightforward, it's the SQL
> I'm struggling with.
> In MS Access, you simply create tables and join them together in the
> graphical ER-digaram, then creating queries is trivial - all the joins are
> done for you.
> 
> It's taken me a week to figure out how to get all the joins in one schema to
> list the records as they were in the original excel spreadsheet:
> 
> Date,Order Number, Customer, Serial Number, Notes
> 
> Oh, this should be sooooo easy!
> 
> I have two remaining issues that I can't figure out.
> 1) My SQL to list everything won't print records with NULL Notes.
> 2) I don't understand if I'm supposed to be using the indexes I've created
> explicitly, or if they're used automagically.
> 
> Here's the database Schema:
> 
> 
> CREATE TABLE [Customer] (
>  [ID] INTEGER  PRIMARY KEY AUTOINCREMENT NOT NULL,
>  [Name] TEXT  UNIQUE NOT NULL);
> 
> CREATE TABLE [Notes] (
>  [ID] INTEGER  PRIMARY KEY AUTOINCREMENT NOT NULL,
>  [Note] TEXT  UNIQUE NOT NULL);
> 
> CREATE TABLE [Order] (
>  [ID] INTEGER  PRIMARY KEY AUTOINCREMENT NOT NULL,
>  [Number] TEXT  UNIQUE NOT NULL,
>  [Customer] INTEGER NOT NULL REFERENCES Customer(ID) ON UPDATE CASCADE,
> [Date] DATE);
> 
> CREATE TABLE [SoldItem] (
>  [ID] INTEGER  PRIMARY KEY AUTOINCREMENT NOT NULL,
>  [Serial] TEXT  UNIQUE NULL,
>  [Order] INTEGER  NOT NULL REFERENCES [Order](ID) ON UPDATE CASCADE,
>  [Notes] INTEGER  REFERENCES Notes(ID) ON UPDATE CASCADE);
> 
> CREATE UNIQUE INDEX NotesNote ON Notes(Note);
> 
> CREATE UNIQUE INDEX OrderNumber ON [Order](Number);
> 
> CREATE UNIQUE INDEX SoldItemSerial ON SoldItem(Serial);
> __________________________________________________
> This is the SQL that Access provided:
> 
> SELECT Order.Date, Order.Number, Customer.Name, SoldItem.Serial, Notes.Note
> FROM Notes INNER JOIN (
>  (Customer INNER JOIN [Order]  ON Customer.ID = Order.Customer)
>  INNER JOIN SoldItem ON Order.ID = SoldItem.Order)
>  ON  Notes.ID = SoldItem.Notes;
> __________________________________________________
> This is what I think should work in SQLite:
> 
> SELECT Date, Number, Name, Serial, Note
> FROM (SoldItem JOIN
> (Customer JOIN [Order]  ON Customer.ID =[Order].Customer) [Order]
>  ON    [Order].ID = SoldItem.[Order]) SoldItem
>  JOIN Notes ON SoldItem.Notes = Notes.ID;
> 
> but if SoldItem.Notes is NULL, no record is produced. I've tried
> CROSS,INNER,OUTER and rearranging the order but to no avail.
> 
> If I remove the Notes table from the SQuirreL, it all works, but I want the
> notes in the result!
> Works:
> SELECT Date, Number, Name, Serial
> FROM SoldItem JOIN
> (Customer JOIN [Order]  ON Customer.ID =[Order].Customer) [Order]
>  ON [Order].ID = SoldItem.[Order]
> 
> So could somebody please write me the SQL to to list all the records in the
> database as they were originally (Date, Number, Name, Serial, Note)
> including records with no notes?
> 
> Thanks for your time - much pain will be alleviated :-)
> -- 
> View this message in context: 
> http://old.nabble.com/brain-failed%3A-help-needed-tp33522661p33522661.html
> Sent from the SQLite mailing list archive at Nabble.com.
> 
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to