... join ... using (column) has nothing whatever to do with foreign keys.  

"FROM a JOIN b USING (c) is "syntactic sugar" (meaning that it is sweetening 
and full of calories, but has no nutritional value) for the expression "FROM a, 
b WHERE a.c = b.c"

This is so, for example, if you use really long stupid names it saves 
considerable space and typing:

SELECT * FROM TheFirstTableToBeJoined JOIN TheSecondTableToBeJoined USING 
(TheCommonColumnNameBetweenTheFirstAndTheSecondTable);
-vs-
SELECT * FROM TheFirstTableToBeJoined, TheSecondTableToBeJoined WHERE 
TheFirstTableToBeJoined.TheCommonColumnNameBetweenTheFirstAndTheSecondTable = 
TheSecondTableToBeJoined.TheCommonColumnNameBetweenTheFirstAndTheSecondTable;


> -----Original Message-----
> From: sqlite-users [mailto:sqlite-users-boun...@mailinglists.sqlite.org]
> On Behalf Of Ken Wagner
> Sent: Sunday, 8 January, 2017 04:04
> To: SQLite mailing list
> Subject: Re: [sqlite] Foreign key error...
> 
> Thanks, Kees,
> 
> The message is helpful as a warning.
> 
> select artistname, trackname from artist inner join track on
> trackartist = artistid;  works just fine.
> 
> But isn't the efficiency of 'using (artistid)' more desirable?
> 
> Is the use of a 'trackerartist' as the foreign key used because it is
> more informative?
> 
> I.e., wherever it is seen it shows the track-artist link? But is more
> demanding when coding:
> 
>      'on trackerartist = artistid' vs 'using (artistid)'
> 
> Best or preferred SQLite3 practice for using which foreign reference
> style 'trackartist' vs 'artistid'?
> 
> Thanks,
> Ken
> 
> 
> On 01/08/2017 04:47 AM, Kees Nuyt wrote:
> > On Sun, 8 Jan 2017 04:21:16 -0600, Ken Wagner
> > <beauco...@gmail.com> wrote:
> >
> >> Hello SQLusers,
> >>
> >> The error below occurs even though the
> >>
> >> CREATE TABLE track(
> >>
> >>    trackid     INTEGER,
> >>    trackname   TEXT,
> >>    trackartist INTEGER,
> >>    *FOREIGN KEY(trackartist) REFERENCES artist(artistid)*
> >> );
> >>
> >> statement at https://sqlite.org/foreignkeys.html was observed.
> >>
> >> It appears that 'trackerartist' should be named 'artistid'.
> >>
> >> SQLite3 CLI results using version SQLite 3.15.2 2016-11-28 19:13:37
> >> bbd85d235f7037c6a033a9690534391ffeacecc8
> >>
> >> sqlite> select artistname, trackname from artist inner join track using
> >> (trackartist);
> >> Error:\ cannot join using column trackartist - column not present in
> >> both tables
> >> sqlite> .tables track
> >> track
> >> sqlite> .schema track
> >> CREATE TABLE track(
> >>    trackid     INTEGER,
> >>    trackname   TEXT,
> >>    trackartist INTEGER,
> >>    FOREIGN KEY(trackartist) REFERENCES artist(artistid)
> >> );
> >> sqlite> .schema artist
> >> CREATE TABLE artist(
> >>    artistid    INTEGER PRIMARY KEY,
> >>    artistname  TEXT
> >>
> >> Am I missing something important here?
> > The error message is quite informative: the artist table does
> > not have a column trackartist.
> >
> > Try:
> > select artistname, trackname from artist inner join track on
> > trackartist = artistid;
> >
> > HTH
> >
> 
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users



_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to